A measured comparison of Rayfold, REST and GraphQL

Should you use Rayfold?

Rayfold is a way for an app to talk to its server - the job REST and GraphQL do today. The same online bookstore was built all three ways and tested for real. Rayfold was ahead on 15 of 15 everyday tasks, and on 6 of 6 HTTP methods. On the full Project Gutenberg catalogue (78,086 real books) Rayfold was ahead on 7 of 7 tasks, and behind on none; all are shown below. A second, much larger example, a multi-tenant issue tracker with 630 issues, was built the same three ways: Rayfold was ahead on 10 of 17 scenarios, level on 7 and behind on none. Use it if your screens combine related data, you need live updates, or AI assistants will call your API. Be aware that Rayfold is new: version 0.1.0 is published and its core is frozen, but no one runs it in production yet. New to any of this? Start with the plain-language section, which explains what is being compared before any numbers appear.

REST3 requests466 bytes on the wireGET /books/b1
GET /authors/a1
GET /reviews?bookId=b1&limit=3
GraphQL1 request332 bytes on the wirePOST /graphql
Rayfold1 request177 bytes on the wirePOST /rayfold

One product page (a book, its author and three reviews), loaded from each API. The code lines are the actual requests. Measured: requests and bytes for the page.

REST: resources and URLs, with ETags, Idempotency-Key and SSEGraphQL: one query language, with DataLoader batching and subscriptionsRayfold
15/ 15tasks where Rayfold was ahead
6/ 6HTTP methods where Rayfold was ahead, behind on none of 17 measured facts
3vs 7 and 4network round trips for three common flows: Rayfold vs REST and GraphQL
54%bytes Rayfold's binary encoding moves, compared with GraphQL (104% with JSON)
7/ 7real-data tasks where Rayfold was ahead (0 level, 0 behind)
10/ 17scenarios where Rayfold was ahead on the large example, an issue tracker (7 level, 0 behind)
Start here

What this page is comparing, in plain words

Every app you use - a shop, a chat, a bank - is a screen that asks a server for data and tells it about changes. The rules for that conversation are called an API. This page compares three sets of rules doing the same job. The job never changes: draw one product page, which needs a book, the author who wrote it, and its first three reviews.

REST, the usual way

One web address per thing. /books/b1 is the book, /authors/a1 is its author, /reviews?bookId=b1 its reviews.

  • Simple, and every browser, proxy and CDN already understands it.
  • But one screen needs three addresses, so it takes three trips over the network, and the app waits for each.
  • And each answer arrives whole, whether the screen needed all of those fields or not.

GraphQL, the answer to that

One address for everything. The app writes a query naming exactly the fields it wants, and gets exactly those back, in one trip.

  • No wasted trips and no wasted fields.
  • Calls go to one address and are POSTs by default, which shared caches and CDNs skip. Persisted queries can put reads behind a GET so a CDN can store them; it is a setup step each team makes, not the default.
  • And the things a server must get right anyway - safe retries, who may read what, how expensive a call may be - are left to libraries, conventions and code review.

Rayfold, what is measured here

The app names the fields it wants, as in GraphQL, and several steps travel in one request - a later step may use an earlier step's result.

  • A write comes back saying exactly what changed, so screens already open correct themselves instead of reloading.
  • Permissions, cost limits and caching are written in the schema itself, and enforced on every way in.
  • Reads stay ordinary HTTP, so ETags, shared caches and CDNs keep working.

The three coloured cards at the top of this page are that product page, loaded from each of these. Everything below measures the same kind of everyday task, always against all three.

Rayfold in one minute

One request per screen, with the safety rules in the contract

  • You ask for exactly the fields you need.A shape such as { title author { name } }, like GraphQL. With no shape, you get a sensible default view, so a plain curl call works.
  • Several steps travel in one request.A later step can use an earlier step's result, as in the example on the right: place an order, then pay for it, in one round trip.
  • Writes are safe to retry.Every write carries an idempotency key. If the network fails and the app sends it again, the server answers with the first result.
  • Screens stay correct after a write.Every write returns patches, so every cached screen that shows the changed data updates without reloading.
  • Rules live in the schema.Permissions, value ranges, cost limits and caching are declared once and enforced on every path, including live updates and AI tools.
  • It is still plain HTTP.GET, POST, PUT, PATCH, DELETE and QUERY all work, with ETags and shared caches. JSON always works; the binary encoding is optional.
query reads data; can be cached and made live
command changes data; retry-safe, typed errors, patches
stream sends a sequence of items
event a fact others can subscribe to

A real Rayfold request from the tests: place an order for a book, then pay for it using the new order's id ($ref), in one round trip.

POST /rayfold
authorization: Bearer u1
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "e2e-place-pay-0001",
... 15 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"ok":{"$type":"Order","id":"o1"},"patch":[{"set":"Order:o1","value":{"$type":"Order","id":"o1"}},{"set":"Book:b3","value":{"stock":99}}],"meta":{"cost":1},"fin":true}
{"id":2,"ok":{"$type":"Order","id":"o1","status":"PAID"},"patch":[{"set":"Order:o1","value":{"$type":"Order","id":"o1","status":"PAID"}}],"meta":{"cost":1},"fin":true}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "e2e-place-pay-0001",
      "shape": "{ id }"
    },
    {
      "id": 2,
      "op": "payOrder",
      "args": {
        "id": {
          "$ref": "1.id"
        }
      },
      "key": "e2e-place-pay-0002",
      "shape": "{ id status }"
    }
  ]
}
Why it comes out ahead

Five differences, and what each one costs the others

None of these is a trick of the benchmark. Each is a structural choice, and each produces a measured difference in the sections below.

See it work

Twelve things REST and GraphQL make you do, that this protocol does for you

One frame, on a loop. Each scene shows a real request, what comes back, and how the same job goes on REST and on GraphQL. Every comparison here is a row from the measured tables further down this page.

1 / 13

Your screens update themselves

Add live: true to a normal read. When someone else changes the data, the server sends just the part that changed.

{ "ops": [ { "id": 1, "op": "issues",
             "shape": "{ items { id title state } }",
             "live": true } ] }
Your board, open
Todo 21
Retry on 429
Cursor resumes after reconnect
In review 12
Batch loader for labels
Cursor resumes after reconnect
Someone else moves that card, on another machine
{"id":1,"patch":[{"set":"Issue:i7","value":{"state":"IN_REVIEW"}}]}
RESTAn events endpoint, then fetch the whole board again
GraphQLA subscription, a resolver, and merge code you write
New protocolOne changed row arrives. No client code at all
{ "ops": [ { "id": 1, "op": "book", "args": { "id": "b1" },
             "shape": "{ ...Book.card }", "compact": true } ] }
What goes over the network
GET /books/b1 GET /authors/a1 GET /reviews?bookId=b1&limit=3 POST /rayfold  - the whole page, once, in binary
177bytes in binary (328 as JSON), against 466 over REST
REST3 requests in 2 waves, 466 bytes
GraphQL1 request, 332 bytes as JSON
New protocol1 request, 177 bytes in binary, 328 as JSON
{ "ops": [
  { "id": 1, "op": "placeOrder", "args": { ... }, "key": "idem-7f3a" },
  { "id": 2, "op": "payOrder",
    "args": { "id": { "$ref": "1.id" } } } ] }
Network waits, for the same work
REST
New
{"id":1,"ok":{"$type":"Order","id":"o1"}} {"id":2,"ok":{"$type":"Order","id":"o1","status":"PAID"}}
REST2 trips: the second needs the first one's id
GraphQL2 trips: a mutation cannot feed another
New protocol1 trip
{ "ops": [ { "id": 1, "op": "books",
             "shape": "{ items { id title } }" } ] }
What comes back, per book
id: "b1" title: "The Dispossessed" format: "PAPERBACK" price: "12.99" stock: 5 authorId: "a1" ownerId: "u1"
Five fields the screen never showed did not cross the network
REST2,375 bytes: whole records, every time
GraphQL821 bytes
New protocol635 bytes on the binary wire
fields: {
  Book: { author: (books) => authorsOf(books) }
}
20 books, each with its author's name
201lookups for the authors
REST9 extra requests, made by the client
GraphQL20, unless someone hand-writes a loader
New protocol1, always
{ "ops": [ { "id": 1, "op": "restock",
             "args": { "bookId": "b1", "qty": 3 },
             "key": "restock-91c2" } ] }
Two screens, both already open
Product pagestock 58
Stock liststock 58
{"id":1,"ok":{"$type":"Book","id":"b1","stock":8}, "patch":[{"set":"Book:b1","value":{"stock":8}}]}
RESTFetch the list again, or show something stale
GraphQLFetch again, or write your own cache updates
New protocol0 extra requests: the change came with the write
POST /api  { "op": "placeOrder", "key": "idem-7f3a" }
POST /api  { "op": "placeOrder", "key": "idem-7f3a" }
The same order, sent twice
{"id":1,"ok":{"$type":"Order","id":"o1"},"meta":{"replay":true}}
1order created, not 2
RESTA duplicate, unless every client remembers the header
GraphQLA duplicate: there is no idempotency concept
New protocolThe key is required, so the retry is free
command placeOrder(qty: Int @range(min: 1)): Order
  throws OutOfStock { bookId: ID, available: Int }
Someone sends qty: 0
{"id":1,"error":{"code":"invalid_argument", "message":"qty must be at least 1","path":"qty"}}
{"id":2,"error":{"code":"domain","type":"OutOfStock", "data":{"bookId":"b4","available":0}}}
RESTBoth bad orders were created. Error shape by convention
GraphQLType error only. qty 0 got through
New protocolBoth refused, nothing written, errors typed
entity Book {
  price: Decimal
  costPrice: Decimal? @allow(read: viewer.role == "admin")
}
The same query, two callers
viewer: adminviewer: customer
{"data":{"id":"b1","price":"12.99","costPrice":"7.10"}}
{"data":{"id":"b1","price":"12.99"}}
ok batches ok REST routes ok live updates ok AI tools
RESTRepeated in every handler that touches the field
GraphQLRepeated in every resolver, and null when denied
New protocolWritten once, enforced on every way in
query search(page: PageArgs) @cost(base: 5, perItem: 1)
# a caller asks for 200 x 200 x 200 nested items
What the server does with it
{"id":1,"error":{"code":"resource_exhausted", "message":"cost 8,120,000 over the budget of 1,000"}}
0database queries were run
RESTNo query language, so no query to abuse
GraphQLIt runs, unless a cost plugin was added
New protocolRefused before execution, from the schema
POST /mcp   { "method": "tools/list" }
POST /api  { "op": "placeOrder", "simulate": true }
What the assistant sees
tools: book, books, placeOrder, payOrder, restock each with JSON Schema in and out, and its typed errors
{"id":1,"ok":{"simulated":true,"wouldCharge":"12.99"}}
RESTHand-written OpenAPI plus an adapter. No dry run
GraphQLIntrospection plus custom glue. No dry run
New protocolNothing to write. Dry runs built in
costPrice: Decimal? @deprecated(sunset: "2026-12-01",
                               replacement: "margin")
the schema check, in your pipeline
blocked removed with no notice and no sunset date blocked still asked for by checkout/2.1, 4 days ago allowed sunset passed, no client asked in 30 days
RESTNo field-level contract: every removal just ships
GraphQLFlags every removal, and knows nothing about sunsets
New protocolBlocked early, allowed once it is provably safe

One protocol.
Fewer requests, fewer bugs,
fewer things to remember.

Ahead on 15 of 15 bookstore tasks TypeScript and Kotlin, same frames Open source, Apache-2.0
0.1 on npm and Maven Central

Someone else moved a card. Your app received the one row that changed, not the whole board.

How this works
Choosing

Which one fits your project?

Choose Rayfold if

  • Your screens combine related data (products with authors and reviews, orders with items) and you want one request per screen.
  • You want HTTP caching and CDNs to work for those combined screens.
  • You need live updates without running a second system.
  • AI assistants will call your API and need typed tools and dry runs.
  • You want permissions, limits and retry safety enforced by the contract, not remembered in each handler.
  • You can accept being an early adopter (see below).

Stay with REST if

  • Your API is simple: a few resources, few links between them.
  • Many outside developers use it and expect plain REST.
  • You need the widest support from proxies, gateways and tools today.
  • Note: Rayfold can also serve REST-style routes (GET /books/{id}) from the same schema, so moving later can be gradual.

Stay with GraphQL if

  • You already run GraphQL well, with federation, code generation and trained teams.
  • You depend on its large ecosystem, such as Apollo, Relay and IDE tooling.
  • You are content to configure persisted queries, cache plugins and retry conventions yourself, or you do not need them.

Before you decide: Rayfold's current status

  • Rayfold Core 0.1 (the batch envelope, frames, shapes, errors, permissions, caching and evolution rules) is frozen with the 0.1.0 release: it changes only by errata that no conforming server fails. The live updates, binary encoding, AI bridge and REST-route extensions are drafts and may still change; a server says which it serves in its manifest.
  • There are two reference implementations, TypeScript and Kotlin, both complete: batches, live queries over HTTP and WebSocket, the binary encoding, AI tools and REST routes. They produce identical frames for every conformance case.
  • The tools a working day needs are there: an explorer served next to the endpoint, a language server so editors underline a broken schema as you type, a mock server that answers from the schema before any resolver exists, importers from an OpenAPI document or a GraphQL SDL, result types that follow the shape you asked for, and a build-time check that every operation and every field taking arguments is actually wired to a resolver.
  • Version 0.1.0 is published: twelve npm packages and seven JVM artifacts on Maven Central, with the documentation at rayfold.dev. What is young is the use: no one runs Rayfold in production yet, and it has no ecosystem beside these packages.
  • All numbers on this page come from automated tests on one computer, not from production traffic. The next section shows every request, so you can judge them yourself.
Examples

15 everyday tasks, built three ways

Each card is one automated test that ran against all three APIs. The bars show what was measured; the text explains each result. Open a card's requests to see exactly what each API sent and received, using real data: 36 real books by 12 authors, with 24 reviews.

Speed and data size

How many requests and how many bytes one screen costs.

Show one product page: a book, its author and its reviews.

Rayfold ahead

Every extra request adds a network wait. On a phone far from the server, those waits are most of the loading time.

Measured: requests and bytes for the page (bytes on the wire (request + response), lower is better)

RESTREST: 466 bytes on the wire (request + response)466GraphQLGraphQL: 332 bytes on the wire (request + response)332RayfoldRayfold: 177 bytes on the wire (request + response)177
REST
3 requests in 2 waves, 466 B
GraphQL
1 request, 332 B as JSON
Rayfold
1 request, 177 B in binary, 328 B as JSON

The same data on all three; each count is the URL path plus the request and the response. GraphQL sends 123 B and gets 209 B back, as JSON. Rayfold in its binary format sends 60 B and gets 117 B back; as JSON it would be 99 B and 229 B, no more than GraphQL. Most of the saving is the binary format; the request is also shorter because it names a view the server defines (Book.card) instead of listing every field.

See the real requests and responses (5)

REST 3 requests

GET /books/b1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "448f56b82184d34f"

{
  "id": "b1",
  "title": "The Dispossessed",
  "format": "PAPERBACK",
  "price": "12.99",
  "stock": 5,
  "authorId": "a1",
  "ownerId": "u1"
}
GET /authors/a1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "28bbc6e5edb7fc7e"

{
  "id": "a1",
  "name": "Ursula K. Le Guin",
  "bio": "American author of speculative fiction."
}
1 more request
GET /reviews?bookId=b1&limit=3
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "cb5cb358af1b2242"

{
  "items": [
    {
      "id": "r1",
      "rating": 5,
      "body": "Ambiguous utopia, unambiguous masterpiece.",
      "bookId": "b1",
      "reviewerId": "u2",
      "version": 1
    },
    {
      "id": "r4",
      "rating": 3,
      "body": "Slow start.",
      "bookId": "b1",
      "reviewerId": "u3",
... 4 more lines
Full response body
{
  "items": [
    {
      "id": "r1",
      "rating": 5,
      "body": "Ambiguous utopia, unambiguous masterpiece.",
      "bookId": "b1",
      "reviewerId": "u2",
      "version": 1
    },
    {
      "id": "r4",
      "rating": 3,
      "body": "Slow start.",
      "bookId": "b1",
      "reviewerId": "u3",
      "version": 1
    }
  ]
}

GraphQL 1 request

POST /graphql
content-type: application/json

{
  "query": "{ book(id: \"b1\") { id title format price stock author { id name } reviews(first: 3) { id rating } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "book": {
      "id": "b1",
      "title": "The Dispossessed",
      "format": "PAPERBACK",
      "price": "12.99",
      "stock": 5,
      "author": {
        "id": "a1",
        "name": "Ursula K. Le Guin"
      },
      "reviews": [
        {
          "id": "r1",
          "rating": 5
... 9 more lines
Full response body
{
  "data": {
    "book": {
      "id": "b1",
      "title": "The Dispossessed",
      "format": "PAPERBACK",
      "price": "12.99",
      "stock": 5,
      "author": {
        "id": "a1",
        "name": "Ursula K. Le Guin"
      },
      "reviews": [
        {
          "id": "r1",
          "rating": 5
        },
        {
          "id": "r4",
          "rating": 3
        }
      ]
    }
  }
}

Rayfold 1 request

POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 52 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"book","args":{"id":"b1"},"shape":"{ ...Book.card }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 117 bytes on the wire, shown decoded:
{"id":1,"data":{"id":"b1","title":"The Dispossessed","format":"PAPERBACK","price":"12.99","stock":5,"author":{"id":"a1","name":"Ursula K. Le Guin"},"reviews":{"items":[{"id":"r1","rating":5},{"id":"r4","rating":3}]}},"fin":true}

List 20 books with each author's name.

Rayfold ahead

When related data is loaded one item at a time (the 'N+1' problem), a list of 20 costs 21 trips to the database or the network.

Measured: author lookups at the backend (author lookups with straightforward code, lower is better)

RESTREST: 9 author lookups with straightforward code9GraphQLGraphQL: 20 author lookups with straightforward code20RayfoldRayfold: 1 author lookups with straightforward code1
REST
9 extra requests from the client (N+1 at the edge)
GraphQL
20 with the obvious resolver; 1 only with a hand-written DataLoader (both measured)
Rayfold
1: a batch loader is the only resolver shape

`rayfold explain` shows one loader call per level

See the real requests and responses (13)

REST 10 requests

GET /books?limit=20
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8d49a86461a8a49f"

{
  "items": [
    {
      "id": "b1",
      "title": "The Dispossessed",
      "format": "PAPERBACK",
      "price": "12.99",
      "stock": 5,
      "authorId": "a1",
      "ownerId": "u1"
    },
    {
      "id": "b10",
      "title": "Americanah",
      "format": "HARDCOVER",
      "price": "27.00",
... 169 more lines
Full response body
{
  "items": [
    {
      "id": "b1",
      "title": "The Dispossessed",
      "format": "PAPERBACK",
      "price": "12.99",
      "stock": 5,
      "authorId": "a1",
      "ownerId": "u1"
    },
    {
      "id": "b10",
      "title": "Americanah",
      "format": "HARDCOVER",
      "price": "27.00",
      "stock": 4,
      "authorId": "a6",
      "ownerId": "u2"
    },
    {
      "id": "b11",
      "title": "The Remains of the Day",
      "format": "PAPERBACK",
      "price": "8.99",
      "stock": 12,
      "authorId": "a7",
      "ownerId": "u1"
    },
    {
      "id": "b12",
      "title": "Never Let Me Go",
      "format": "EBOOK",
      "price": "6.99",
      "stock": 1000,
      "authorId": "a7",
      "ownerId": "u1"
    },
    {
      "id": "b13",
      "title": "Klara and the Sun",
      "format": "HARDCOVER",
      "price": "28.00",
      "stock": 7,
      "authorId": "a7",
      "ownerId": "u2"
    },
    {
      "id": "b14",
      "title": "Ficciones",
      "format": "PAPERBACK",
      "price": "9.00",
      "stock": 5,
      "authorId": "a8",
      "ownerId": "u1"
    },
    {
      "id": "b15",
      "title": "Labyrinths",
      "format": "PAPERBACK",
      "price": "13.00",
      "stock": 3,
      "authorId": "a8",
      "ownerId": "u2"
    },
    {
      "id": "b16",
      "title": "Mrs Dalloway",
      "format": "PAPERBACK",
      "price": "7.50",
      "stock": 18,
      "authorId": "a9",
      "ownerId": "u1"
    },
    {
      "id": "b17",
      "title": "To the Lighthouse",
      "format": "HARDCOVER",
      "price": "19.00",
      "stock": 2,
      "authorId": "a9",
      "ownerId": "u2"
    },
    {
      "id": "b18",
      "title": "Orlando",
      "format": "EBOOK",
      "price": "4.99",
      "stock": 1000,
      "authorId": "a9",
      "ownerId": "u1"
    },
    {
      "id": "b19",
      "title": "Kafka on the Shore",
      "format": "PAPERBACK",
      "price": "12.50",
      "stock": 8,
      "authorId": "a10",
      "ownerId": "u2"
    },
    {
      "id": "b2",
      "title": "Invisible Cities",
      "format": "HARDCOVER",
      "price": "19.50",
      "stock": 2,
      "authorId": "a2",
      "ownerId": "u2"
    },
    {
      "id": "b20",
      "title": "Norwegian Wood",
      "format": "PAPERBACK",
      "price": "10.99",
      "stock": 11,
      "authorId": "a10",
      "ownerId": "u1"
    },
    {
      "id": "b21",
      "title": "The Fifth Season",
      "format": "PAPERBACK",
      "price": "9.99",
      "stock": 16,
      "authorId": "a11",
      "ownerId": "u1"
    },
    {
      "id": "b22",
      "title": "The Obelisk Gate",
      "format": "PAPERBACK",
      "price": "9.99",
      "stock": 10,
      "authorId": "a11",
      "ownerId": "u2"
    },
    {
      "id": "b23",
      "title": "The Stone Sky",
      "format": "HARDCOVER",
      "price": "26.00",
      "stock": 5,
      "authorId": "a11",
      "ownerId": "u1"
    },
    {
      "id": "b24",
      "title": "Stories of Your Life and Others",
      "format": "PAPERBACK",
      "price": "11.00",
      "stock": 13,
      "authorId": "a12",
      "ownerId": "u2"
    },
    {
      "id": "b25",
      "title": "Exhalation",
      "format": "HARDCOVER",
      "price": "25.00",
      "stock": 6,
      "authorId": "a12",
      "ownerId": "u1"
    },
    {
      "id": "b26",
      "title": "The Left Hand of Darkness",
      "format": "PAPERBACK",
      "price": "10.49",
      "stock": 9,
      "authorId": "a1",
      "ownerId": "u2"
    },
    {
      "id": "b27",
      "title": "The Lathe of Heaven",
      "format": "EBOOK",
      "price": "5.99",
      "stock": 1000,
      "authorId": "a1",
      "ownerId": "u1"
    }
  ],
  "total": 36
}
GET /authors/a1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "28bbc6e5edb7fc7e"

{
  "id": "a1",
  "name": "Ursula K. Le Guin",
  "bio": "American author of speculative fiction."
}
8 more requests
GET /authors/a6
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "de6a871eb8730c2d"

{
  "id": "a6",
  "name": "Chimamanda Ngozi Adichie",
  "bio": "Nigerian novelist and essayist."
}
GET /authors/a7
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "dca8d7b031d9dd19"

{
  "id": "a7",
  "name": "Kazuo Ishiguro",
  "bio": "Nobel laureate in Literature, 2017."
}
GET /authors/a8
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "74f6e8c2a1886d1b"

{
  "id": "a8",
  "name": "Jorge Luis Borges",
  "bio": "Argentine writer of short stories, essays and poems."
}
GET /authors/a9
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "b4e4cfde092a1b5e"

{
  "id": "a9",
  "name": "Virginia Woolf",
  "bio": "English modernist novelist and essayist."
}
GET /authors/a10
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d74f7b665e26bb0e"

{
  "id": "a10",
  "name": "Haruki Murakami",
  "bio": null
}
GET /authors/a2
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "5251786f2bcf4a5b"

{
  "id": "a2",
  "name": "Italo Calvino",
  "bio": null
}
GET /authors/a11
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "6684c9a6cb4f0824"

{
  "id": "a11",
  "name": "N. K. Jemisin",
  "bio": "Won the Hugo Award for Best Novel three years running for the Broken Earth trilogy."
}
GET /authors/a12
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "ab92ad733f85292b"

{
  "id": "a12",
  "name": "Ted Chiang",
  "bio": "Author of the novella Story of Your Life."
}

GraphQL 2 requests

POST /graphql
content-type: application/json

{
  "query": "{ books(first: 20) { items { id title author { name } } } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "b1",
          "title": "The Dispossessed",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b10",
          "title": "Americanah",
          "author": {
            "name": "Chimamanda Ngozi Adichie"
... 132 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "b1",
          "title": "The Dispossessed",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b10",
          "title": "Americanah",
          "author": {
            "name": "Chimamanda Ngozi Adichie"
          }
        },
        {
          "id": "b11",
          "title": "The Remains of the Day",
          "author": {
            "name": "Kazuo Ishiguro"
          }
        },
        {
          "id": "b12",
          "title": "Never Let Me Go",
          "author": {
            "name": "Kazuo Ishiguro"
          }
        },
        {
          "id": "b13",
          "title": "Klara and the Sun",
          "author": {
            "name": "Kazuo Ishiguro"
          }
        },
        {
          "id": "b14",
          "title": "Ficciones",
          "author": {
            "name": "Jorge Luis Borges"
          }
        },
        {
          "id": "b15",
          "title": "Labyrinths",
          "author": {
            "name": "Jorge Luis Borges"
          }
        },
        {
          "id": "b16",
          "title": "Mrs Dalloway",
          "author": {
            "name": "Virginia Woolf"
          }
        },
        {
          "id": "b17",
          "title": "To the Lighthouse",
          "author": {
            "name": "Virginia Woolf"
          }
        },
        {
          "id": "b18",
          "title": "Orlando",
          "author": {
            "name": "Virginia Woolf"
          }
        },
        {
          "id": "b19",
          "title": "Kafka on the Shore",
          "author": {
            "name": "Haruki Murakami"
          }
        },
        {
          "id": "b2",
          "title": "Invisible Cities",
          "author": {
            "name": "Italo Calvino"
          }
        },
        {
          "id": "b20",
          "title": "Norwegian Wood",
          "author": {
            "name": "Haruki Murakami"
          }
        },
        {
          "id": "b21",
          "title": "The Fifth Season",
          "author": {
            "name": "N. K. Jemisin"
          }
        },
        {
          "id": "b22",
          "title": "The Obelisk Gate",
          "author": {
            "name": "N. K. Jemisin"
          }
        },
        {
          "id": "b23",
          "title": "The Stone Sky",
          "author": {
            "name": "N. K. Jemisin"
          }
        },
        {
          "id": "b24",
          "title": "Stories of Your Life and Others",
          "author": {
            "name": "Ted Chiang"
          }
        },
        {
          "id": "b25",
          "title": "Exhalation",
          "author": {
            "name": "Ted Chiang"
          }
        },
        {
          "id": "b26",
          "title": "The Left Hand of Darkness",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b27",
          "title": "The Lathe of Heaven",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        }
      ]
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "{ books(first: 20) { items { id title author { name } } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "b1",
          "title": "The Dispossessed",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b10",
          "title": "Americanah",
          "author": {
            "name": "Chimamanda Ngozi Adichie"
... 132 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "b1",
          "title": "The Dispossessed",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b10",
          "title": "Americanah",
          "author": {
            "name": "Chimamanda Ngozi Adichie"
          }
        },
        {
          "id": "b11",
          "title": "The Remains of the Day",
          "author": {
            "name": "Kazuo Ishiguro"
          }
        },
        {
          "id": "b12",
          "title": "Never Let Me Go",
          "author": {
            "name": "Kazuo Ishiguro"
          }
        },
        {
          "id": "b13",
          "title": "Klara and the Sun",
          "author": {
            "name": "Kazuo Ishiguro"
          }
        },
        {
          "id": "b14",
          "title": "Ficciones",
          "author": {
            "name": "Jorge Luis Borges"
          }
        },
        {
          "id": "b15",
          "title": "Labyrinths",
          "author": {
            "name": "Jorge Luis Borges"
          }
        },
        {
          "id": "b16",
          "title": "Mrs Dalloway",
          "author": {
            "name": "Virginia Woolf"
          }
        },
        {
          "id": "b17",
          "title": "To the Lighthouse",
          "author": {
            "name": "Virginia Woolf"
          }
        },
        {
          "id": "b18",
          "title": "Orlando",
          "author": {
            "name": "Virginia Woolf"
          }
        },
        {
          "id": "b19",
          "title": "Kafka on the Shore",
          "author": {
            "name": "Haruki Murakami"
          }
        },
        {
          "id": "b2",
          "title": "Invisible Cities",
          "author": {
            "name": "Italo Calvino"
          }
        },
        {
          "id": "b20",
          "title": "Norwegian Wood",
          "author": {
            "name": "Haruki Murakami"
          }
        },
        {
          "id": "b21",
          "title": "The Fifth Season",
          "author": {
            "name": "N. K. Jemisin"
          }
        },
        {
          "id": "b22",
          "title": "The Obelisk Gate",
          "author": {
            "name": "N. K. Jemisin"
          }
        },
        {
          "id": "b23",
          "title": "The Stone Sky",
          "author": {
            "name": "N. K. Jemisin"
          }
        },
        {
          "id": "b24",
          "title": "Stories of Your Life and Others",
          "author": {
            "name": "Ted Chiang"
          }
        },
        {
          "id": "b25",
          "title": "Exhalation",
          "author": {
            "name": "Ted Chiang"
          }
        },
        {
          "id": "b26",
          "title": "The Left Hand of Darkness",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b27",
          "title": "The Lathe of Heaven",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        }
      ]
    }
  }
}

Rayfold 1 request

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 20
        }
      },
      "shape": "{ items { id title author { name } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Book",
        "id": "b1",
        "title": "The Dispossessed",
        "author": {
          "$type": "Author",
          "name": "Ursula K. Le Guin"
        }
      },
      {
        "$type": "Book",
        "id": "b10",
... 175 more lines
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Book",
        "id": "b1",
        "title": "The Dispossessed",
        "author": {
          "$type": "Author",
          "name": "Ursula K. Le Guin"
        }
      },
      {
        "$type": "Book",
        "id": "b10",
        "title": "Americanah",
        "author": {
          "$type": "Author",
          "name": "Chimamanda Ngozi Adichie"
        }
      },
      {
        "$type": "Book",
        "id": "b11",
        "title": "The Remains of the Day",
        "author": {
          "$type": "Author",
          "name": "Kazuo Ishiguro"
        }
      },
      {
        "$type": "Book",
        "id": "b12",
        "title": "Never Let Me Go",
        "author": {
          "$type": "Author",
          "name": "Kazuo Ishiguro"
        }
      },
      {
        "$type": "Book",
        "id": "b13",
        "title": "Klara and the Sun",
        "author": {
          "$type": "Author",
          "name": "Kazuo Ishiguro"
        }
      },
      {
        "$type": "Book",
        "id": "b14",
        "title": "Ficciones",
        "author": {
          "$type": "Author",
          "name": "Jorge Luis Borges"
        }
      },
      {
        "$type": "Book",
        "id": "b15",
        "title": "Labyrinths",
        "author": {
          "$type": "Author",
          "name": "Jorge Luis Borges"
        }
      },
      {
        "$type": "Book",
        "id": "b16",
        "title": "Mrs Dalloway",
        "author": {
          "$type": "Author",
          "name": "Virginia Woolf"
        }
      },
      {
        "$type": "Book",
        "id": "b17",
        "title": "To the Lighthouse",
        "author": {
          "$type": "Author",
          "name": "Virginia Woolf"
        }
      },
      {
        "$type": "Book",
        "id": "b18",
        "title": "Orlando",
        "author": {
          "$type": "Author",
          "name": "Virginia Woolf"
        }
      },
      {
        "$type": "Book",
        "id": "b19",
        "title": "Kafka on the Shore",
        "author": {
          "$type": "Author",
          "name": "Haruki Murakami"
        }
      },
      {
        "$type": "Book",
        "id": "b2",
        "title": "Invisible Cities",
        "author": {
          "$type": "Author",
          "name": "Italo Calvino"
        }
      },
      {
        "$type": "Book",
        "id": "b20",
        "title": "Norwegian Wood",
        "author": {
          "$type": "Author",
          "name": "Haruki Murakami"
        }
      },
      {
        "$type": "Book",
        "id": "b21",
        "title": "The Fifth Season",
        "author": {
          "$type": "Author",
          "name": "N. K. Jemisin"
        }
      },
      {
        "$type": "Book",
        "id": "b22",
        "title": "The Obelisk Gate",
        "author": {
          "$type": "Author",
          "name": "N. K. Jemisin"
        }
      },
      {
        "$type": "Book",
        "id": "b23",
        "title": "The Stone Sky",
        "author": {
          "$type": "Author",
          "name": "N. K. Jemisin"
        }
      },
      {
        "$type": "Book",
        "id": "b24",
        "title": "Stories of Your Life and Others",
        "author": {
          "$type": "Author",
          "name": "Ted Chiang"
        }
      },
      {
        "$type": "Book",
        "id": "b25",
        "title": "Exhalation",
        "author": {
          "$type": "Author",
          "name": "Ted Chiang"
        }
      },
      {
        "$type": "Book",
        "id": "b26",
        "title": "The Left Hand of Darkness",
        "author": {
          "$type": "Author",
          "name": "Ursula K. Le Guin"
        }
      },
      {
        "$type": "Book",
        "id": "b27",
        "title": "The Lathe of Heaven",
        "author": {
          "$type": "Author",
          "name": "Ursula K. Le Guin"
        }
      }
    ]
  },
  "meta": {
    "cost": 46
  },
  "fin": true
}

Load only the two fields the screen shows: id and title.

Rayfold ahead

Bytes the screen never shows still cost mobile data, battery and time.

Measured: bytes on the wire (bytes (Rayfold = RB), lower is better)

RESTREST: 2,375 bytes (Rayfold = RB)2,375GraphQLGraphQL: 821 bytes (Rayfold = RB)821RayfoldRayfold: 635 bytes (Rayfold = RB)635
REST
2375 (full resources)
GraphQL
821
Rayfold
830 compact JSON / 635 RB

compact mode drops $type where the schema fixes it; RB halves it again

See the real requests and responses (4)

REST 1 request

GET /books?limit=20
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8d49a86461a8a49f"

{
  "items": [
    {
      "id": "b1",
      "title": "The Dispossessed",
      "format": "PAPERBACK",
      "price": "12.99",
      "stock": 5,
      "authorId": "a1",
      "ownerId": "u1"
    },
    {
      "id": "b10",
      "title": "Americanah",
      "format": "HARDCOVER",
      "price": "27.00",
... 169 more lines
Full response body
{
  "items": [
    {
      "id": "b1",
      "title": "The Dispossessed",
      "format": "PAPERBACK",
      "price": "12.99",
      "stock": 5,
      "authorId": "a1",
      "ownerId": "u1"
    },
    {
      "id": "b10",
      "title": "Americanah",
      "format": "HARDCOVER",
      "price": "27.00",
      "stock": 4,
      "authorId": "a6",
      "ownerId": "u2"
    },
    {
      "id": "b11",
      "title": "The Remains of the Day",
      "format": "PAPERBACK",
      "price": "8.99",
      "stock": 12,
      "authorId": "a7",
      "ownerId": "u1"
    },
    {
      "id": "b12",
      "title": "Never Let Me Go",
      "format": "EBOOK",
      "price": "6.99",
      "stock": 1000,
      "authorId": "a7",
      "ownerId": "u1"
    },
    {
      "id": "b13",
      "title": "Klara and the Sun",
      "format": "HARDCOVER",
      "price": "28.00",
      "stock": 7,
      "authorId": "a7",
      "ownerId": "u2"
    },
    {
      "id": "b14",
      "title": "Ficciones",
      "format": "PAPERBACK",
      "price": "9.00",
      "stock": 5,
      "authorId": "a8",
      "ownerId": "u1"
    },
    {
      "id": "b15",
      "title": "Labyrinths",
      "format": "PAPERBACK",
      "price": "13.00",
      "stock": 3,
      "authorId": "a8",
      "ownerId": "u2"
    },
    {
      "id": "b16",
      "title": "Mrs Dalloway",
      "format": "PAPERBACK",
      "price": "7.50",
      "stock": 18,
      "authorId": "a9",
      "ownerId": "u1"
    },
    {
      "id": "b17",
      "title": "To the Lighthouse",
      "format": "HARDCOVER",
      "price": "19.00",
      "stock": 2,
      "authorId": "a9",
      "ownerId": "u2"
    },
    {
      "id": "b18",
      "title": "Orlando",
      "format": "EBOOK",
      "price": "4.99",
      "stock": 1000,
      "authorId": "a9",
      "ownerId": "u1"
    },
    {
      "id": "b19",
      "title": "Kafka on the Shore",
      "format": "PAPERBACK",
      "price": "12.50",
      "stock": 8,
      "authorId": "a10",
      "ownerId": "u2"
    },
    {
      "id": "b2",
      "title": "Invisible Cities",
      "format": "HARDCOVER",
      "price": "19.50",
      "stock": 2,
      "authorId": "a2",
      "ownerId": "u2"
    },
    {
      "id": "b20",
      "title": "Norwegian Wood",
      "format": "PAPERBACK",
      "price": "10.99",
      "stock": 11,
      "authorId": "a10",
      "ownerId": "u1"
    },
    {
      "id": "b21",
      "title": "The Fifth Season",
      "format": "PAPERBACK",
      "price": "9.99",
      "stock": 16,
      "authorId": "a11",
      "ownerId": "u1"
    },
    {
      "id": "b22",
      "title": "The Obelisk Gate",
      "format": "PAPERBACK",
      "price": "9.99",
      "stock": 10,
      "authorId": "a11",
      "ownerId": "u2"
    },
    {
      "id": "b23",
      "title": "The Stone Sky",
      "format": "HARDCOVER",
      "price": "26.00",
      "stock": 5,
      "authorId": "a11",
      "ownerId": "u1"
    },
    {
      "id": "b24",
      "title": "Stories of Your Life and Others",
      "format": "PAPERBACK",
      "price": "11.00",
      "stock": 13,
      "authorId": "a12",
      "ownerId": "u2"
    },
    {
      "id": "b25",
      "title": "Exhalation",
      "format": "HARDCOVER",
      "price": "25.00",
      "stock": 6,
      "authorId": "a12",
      "ownerId": "u1"
    },
    {
      "id": "b26",
      "title": "The Left Hand of Darkness",
      "format": "PAPERBACK",
      "price": "10.49",
      "stock": 9,
      "authorId": "a1",
      "ownerId": "u2"
    },
    {
      "id": "b27",
      "title": "The Lathe of Heaven",
      "format": "EBOOK",
      "price": "5.99",
      "stock": 1000,
      "authorId": "a1",
      "ownerId": "u1"
    }
  ],
  "total": 36
}

GraphQL 1 request

POST /graphql
content-type: application/json

{
  "query": "{ books(first: 20) { items { id title } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "b1",
          "title": "The Dispossessed"
        },
        {
          "id": "b10",
          "title": "Americanah"
        },
        {
          "id": "b11",
          "title": "The Remains of the Day"
        },
... 72 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "b1",
          "title": "The Dispossessed"
        },
        {
          "id": "b10",
          "title": "Americanah"
        },
        {
          "id": "b11",
          "title": "The Remains of the Day"
        },
        {
          "id": "b12",
          "title": "Never Let Me Go"
        },
        {
          "id": "b13",
          "title": "Klara and the Sun"
        },
        {
          "id": "b14",
          "title": "Ficciones"
        },
        {
          "id": "b15",
          "title": "Labyrinths"
        },
        {
          "id": "b16",
          "title": "Mrs Dalloway"
        },
        {
          "id": "b17",
          "title": "To the Lighthouse"
        },
        {
          "id": "b18",
          "title": "Orlando"
        },
        {
          "id": "b19",
          "title": "Kafka on the Shore"
        },
        {
          "id": "b2",
          "title": "Invisible Cities"
        },
        {
          "id": "b20",
          "title": "Norwegian Wood"
        },
        {
          "id": "b21",
          "title": "The Fifth Season"
        },
        {
          "id": "b22",
          "title": "The Obelisk Gate"
        },
        {
          "id": "b23",
          "title": "The Stone Sky"
        },
        {
          "id": "b24",
          "title": "Stories of Your Life and Others"
        },
        {
          "id": "b25",
          "title": "Exhalation"
        },
        {
          "id": "b26",
          "title": "The Left Hand of Darkness"
        },
        {
          "id": "b27",
          "title": "The Lathe of Heaven"
        }
      ]
    }
  }
}

Rayfold 2 requests

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 20
        }
      },
      "shape": "{ items { id title } }",
      "compact": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "b1",
        "title": "The Dispossessed"
      },
      {
        "id": "b10",
        "title": "Americanah"
      },
      {
        "id": "b11",
        "title": "The Remains of the Day"
      },
... 72 more lines
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "b1",
        "title": "The Dispossessed"
      },
      {
        "id": "b10",
        "title": "Americanah"
      },
      {
        "id": "b11",
        "title": "The Remains of the Day"
      },
      {
        "id": "b12",
        "title": "Never Let Me Go"
      },
      {
        "id": "b13",
        "title": "Klara and the Sun"
      },
      {
        "id": "b14",
        "title": "Ficciones"
      },
      {
        "id": "b15",
        "title": "Labyrinths"
      },
      {
        "id": "b16",
        "title": "Mrs Dalloway"
      },
      {
        "id": "b17",
        "title": "To the Lighthouse"
      },
      {
        "id": "b18",
        "title": "Orlando"
      },
      {
        "id": "b19",
        "title": "Kafka on the Shore"
      },
      {
        "id": "b2",
        "title": "Invisible Cities"
      },
      {
        "id": "b20",
        "title": "Norwegian Wood"
      },
      {
        "id": "b21",
        "title": "The Fifth Season"
      },
      {
        "id": "b22",
        "title": "The Obelisk Gate"
      },
      {
        "id": "b23",
        "title": "The Stone Sky"
      },
      {
        "id": "b24",
        "title": "Stories of Your Life and Others"
      },
      {
        "id": "b25",
        "title": "Exhalation"
      },
      {
        "id": "b26",
        "title": "The Left Hand of Darkness"
      },
      {
        "id": "b27",
        "title": "The Lathe of Heaven"
      }
    ]
  },
  "fin": true
}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 20
        }
      },
      "shape": "{ items { id title } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 635 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"$type":"Book","id":"b1","title":"The Dispossessed"},{"$type":"Book","id":"b10","title":"Americanah"},{"$type":"Book","id":"b11","title":"The Remains of the Day"},{"$type":"Book","id":"b12","title":"Never Let Me Go"},{"$type":"Book","id":"b13","title":"Klara and the Sun"},{"$type":"Book","id":"b14","title":"Ficciones"},{"$type":"Book","id":"b15","title":"Labyrinths"},{"$type":"Book","id":"b16","title":"Mrs Dalloway"},{"$type":"Book","id":"b17","title":"To the Lighthouse"},{"$type":"Book","id":"b18","title":"Orlando"},{"$type":"Book","id":"b19","title":"Kafka on the Shore"},{"$type":"Book","id":"b2","title":"Invisible Cities"},{"$type":"Book","id":"b20","title":"Norwegian Wood"},{"$type":"Book","id":"b21","title":"The Fifth Season"},{"$type":"Book","id":"b22","title":"The Obelisk Gate"},{"$type":"Book","id":"b23","title":"The Stone Sky"},{"$type":"Book","id":"b24","title":"Stories of Your Life and Others"},{"$type":"Book","id":"b25","title":"Exhalation"},{"$type":"Book","id":"b26","title":"The Left Hand of Darkness"},{"$type":"Book","id":"b27","title":"The Lathe of Heaven"}]},"meta":{"cost":26},"fin":true}

One field (the author's biography) is slow. Show the rest of the page first.

Rayfold ahead

People see content sooner when a slow part does not hold back the fast parts.

Measured: mechanism (slow field sent later in the same response (1 = yes), higher is better)

RESTREST: no slow field sent later in the same response (1 = yes)noGraphQLGraphQL: no slow field sent later in the same response (1 = yes)noRayfoldRayfold: yes slow field sent later in the same response (1 = yes)yes
REST
the book carries only authorId; the bio takes a second request to /authors/a4
GraphQL
one JSON body: the whole page waits for the bio (@defer is not in graphql-js 16)
Rayfold
`@lazy` bio arrives in a later frame at path `author`, same request
See the real requests and responses (4)

REST 2 requests

the book, with the author only as an id

GET /books/b5
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "0f0cd477ae2d745b"

{
  "id": "b5",
  "title": "Beloved",
  "format": "PAPERBACK",
  "price": "9.50",
  "stock": 14,
  "authorId": "a4",
  "ownerId": "u1"
}

a second request for the author and the slow bio

GET /authors/a4
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "bb4fa4da37e09e5c"

{
  "id": "a4",
  "name": "Toni Morrison",
  "bio": "Nobel laureate in Literature, 1993."
}

GraphQL 1 request

one query: the whole body waits for the bio

POST /graphql
content-type: application/json

{
  "query": "{ book(id: \"b5\") { title author { name bio } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "book": {
      "title": "Beloved",
      "author": {
        "name": "Toni Morrison",
        "bio": "Nobel laureate in Literature, 1993."
      }
    }
  }
}

Rayfold 1 request

one request: the page first, the lazy bio in a later frame

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b5"
      },
      "shape": "{ title author { name bio } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"$type":"Book","title":"Beloved","author":{"$type":"Author","name":"Toni Morrison"}},"meta":{"cost":2}}
{"id":1,"at":"author","data":{"bio":"Nobel laureate in Literature, 1993."}}
{"id":1,"fin":true}

Writing data safely

Actions with several steps, and retries after a network failure.

Place an order, then pay for it. Paying needs the new order's id.

Rayfold ahead

Each step that must wait for the previous answer adds one more network wait.

Measured: round trips for two dependent commands (round trips, lower is better)

RESTREST: 2 round trips2GraphQLGraphQL: 2 round trips2RayfoldRayfold: 1 round trips1
REST
2
GraphQL
2 (a mutation's result cannot feed a second mutation in the same document)
Rayfold
1 ($ref pipelining)

reading back the created order is 1 request on GraphQL too, via the mutation's selection set; dependent commands are where pipelining matters

See the real requests and responses (5)

REST 2 requests

POST /orders
authorization: Bearer u1
content-type: application/json
idempotency-key: k-rest-pay-00001

{
  "lines": [
    {
      "bookId": "b3",
      "qty": 1
    }
  ]
}
201 Created
content-type: application/json
location: /orders/o1

{
  "id": "o1",
  "status": "PLACED",
  "customerId": "u1",
  "items": [
    {
      "bookId": "b3",
      "qty": 1,
      "unitPrice": "8.00"
    }
  ],
  "total": "8.00"
}
POST /orders/o1/pay
authorization: Bearer u1
content-type: application/json

{}
200 OK
content-type: application/json

{
  "id": "o1",
  "status": "PAID",
  "customerId": "u1",
  "items": [
    {
      "bookId": "b3",
      "qty": 1,
      "unitPrice": "8.00"
    }
  ],
  "total": "8.00"
}

GraphQL 2 requests

POST /graphql
authorization: Bearer u1
content-type: application/json

{
  "query": "mutation { placeOrder(lines: [{ bookId: \"b3\", qty: 1 }]) { id status } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "placeOrder": {
      "id": "o1",
      "status": "PLACED"
    }
  }
}
POST /graphql
authorization: Bearer u1
content-type: application/json

{
  "query": "mutation($id: ID!) { payOrder(id: $id) { status } }",
  "variables": {
    "id": "o1"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "payOrder": {
      "status": "PAID"
    }
  }
}

Rayfold 1 request

POST /rayfold
authorization: Bearer u1
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "e2e-place-pay-0001",
... 15 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"ok":{"$type":"Order","id":"o1"},"patch":[{"set":"Order:o1","value":{"$type":"Order","id":"o1"}},{"set":"Book:b3","value":{"stock":99}}],"meta":{"cost":1},"fin":true}
{"id":2,"ok":{"$type":"Order","id":"o1","status":"PAID"},"patch":[{"set":"Order:o1","value":{"$type":"Order","id":"o1","status":"PAID"}}],"meta":{"cost":1},"fin":true}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "e2e-place-pay-0001",
      "shape": "{ id }"
    },
    {
      "id": 2,
      "op": "payOrder",
      "args": {
        "id": {
          "$ref": "1.id"
        }
      },
      "key": "e2e-place-pay-0002",
      "shape": "{ id status }"
    }
  ]
}

The connection drops after the customer taps Buy, so the app sends the order again.

Rayfold ahead

Without a guard that the server enforces, a retry can create a second order and charge twice.

Measured: duplicate orders after a retry (duplicate orders (client forgot the key), lower is better)

RESTREST: 1 duplicate orders (client forgot the key)1GraphQLGraphQL: 1 duplicate orders (client forgot the key)1RayfoldRayfold: 0 duplicate orders (client forgot the key)0
REST
0 with Idempotency-Key, 1 without (optional convention)
GraphQL
1 (no idempotency concept)
Rayfold
0 (key mandatory, replay returned, missing key rejected)
See the real requests and responses (9)

REST 4 requests

POST /orders
authorization: Bearer u1
content-type: application/json
idempotency-key: k-rest-1

{
  "lines": [
    {
      "bookId": "b3",
      "qty": 1
    }
  ]
}
201 Created
content-type: application/json
location: /orders/o1

{
  "id": "o1",
  "status": "PLACED",
  "customerId": "u1",
  "items": [
    {
      "bookId": "b3",
      "qty": 1,
      "unitPrice": "8.00"
    }
  ],
  "total": "8.00"
}

retry with the same Idempotency-Key: replayed

POST /orders
authorization: Bearer u1
content-type: application/json
idempotency-key: k-rest-1

{
  "lines": [
    {
      "bookId": "b3",
      "qty": 1
    }
  ]
}
201 Created
content-type: application/json
idempotent-replayed: true

{
  "id": "o1",
  "status": "PLACED",
  "customerId": "u1",
  "items": [
    {
      "bookId": "b3",
      "qty": 1,
      "unitPrice": "8.00"
    }
  ],
  "total": "8.00"
}
2 more requests

a client that forgets the header

POST /orders
authorization: Bearer u1
content-type: application/json

{
  "lines": [
    {
      "bookId": "b3",
      "qty": 1
    }
  ]
}
201 Created
content-type: application/json
location: /orders/o2

{
  "id": "o2",
  "status": "PLACED",
  "customerId": "u1",
  "items": [
    {
      "bookId": "b3",
      "qty": 1,
      "unitPrice": "8.00"
    }
  ],
  "total": "8.00"
}

its retry: a second order

POST /orders
authorization: Bearer u1
content-type: application/json

{
  "lines": [
    {
      "bookId": "b3",
      "qty": 1
    }
  ]
}
201 Created
content-type: application/json
location: /orders/o3

{
  "id": "o3",
  "status": "PLACED",
  "customerId": "u1",
  "items": [
    {
      "bookId": "b3",
      "qty": 1,
      "unitPrice": "8.00"
    }
  ],
  "total": "8.00"
}

GraphQL 2 requests

POST /graphql
authorization: Bearer u1
content-type: application/json

{
  "query": "mutation { placeOrder(lines: [{ bookId: \"b3\", qty: 1 }]) { id } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "placeOrder": {
      "id": "o1"
    }
  }
}
POST /graphql
authorization: Bearer u1
content-type: application/json

{
  "query": "mutation { placeOrder(lines: [{ bookId: \"b3\", qty: 1 }]) { id } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "placeOrder": {
      "id": "o2"
    }
  }
}

Rayfold 3 requests

POST /rayfold
authorization: Bearer u1
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "e2e-retry-000000001"
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "$type": "Order",
    "id": "o1",
    "status": "PLACED",
    "total": "8.00",
    "items": [
      {
        "qty": 1,
        "unitPrice": "8.00",
        "book": {
          "$type": "Book",
          "id": "b3",
          "title": "Kindred"
        }
... 42 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "e2e-retry-000000001"
    }
  ]
}
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Order",
    "id": "o1",
    "status": "PLACED",
    "total": "8.00",
    "items": [
      {
        "qty": 1,
        "unitPrice": "8.00",
        "book": {
          "$type": "Book",
          "id": "b3",
          "title": "Kindred"
        }
      }
    ]
  },
  "patch": [
    {
      "set": "Order:o1",
      "value": {
        "$type": "Order",
        "id": "o1",
        "status": "PLACED",
        "total": "8.00",
        "items": [
          {
            "qty": 1,
            "unitPrice": "8.00",
            "book": {
              "$ref": "Book:b3"
            }
          }
        ]
      }
    },
    {
      "set": "Book:b3",
      "value": {
        "$type": "Book",
        "id": "b3",
        "title": "Kindred"
      }
    },
    {
      "set": "Book:b3",
      "value": {
        "stock": 99
      }
    }
  ],
  "meta": {
    "cost": 3
  },
  "fin": true
}
POST /rayfold
authorization: Bearer u1
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "e2e-retry-000000001"
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "$type": "Order",
    "id": "o1",
    "status": "PLACED",
    "total": "8.00",
    "items": [
      {
        "qty": 1,
        "unitPrice": "8.00",
        "book": {
          "$type": "Book",
          "id": "b3",
          "title": "Kindred"
        }
... 43 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "e2e-retry-000000001"
    }
  ]
}
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Order",
    "id": "o1",
    "status": "PLACED",
    "total": "8.00",
    "items": [
      {
        "qty": 1,
        "unitPrice": "8.00",
        "book": {
          "$type": "Book",
          "id": "b3",
          "title": "Kindred"
        }
      }
    ]
  },
  "patch": [
    {
      "set": "Order:o1",
      "value": {
        "$type": "Order",
        "id": "o1",
        "status": "PLACED",
        "total": "8.00",
        "items": [
          {
            "qty": 1,
            "unitPrice": "8.00",
            "book": {
              "$ref": "Book:b3"
            }
          }
        ]
      }
    },
    {
      "set": "Book:b3",
      "value": {
        "$type": "Book",
        "id": "b3",
        "title": "Kindred"
      }
    },
    {
      "set": "Book:b3",
      "value": {
        "stock": 99
      }
    }
  ],
  "meta": {
    "cost": 3,
    "replay": true
  },
  "fin": true
}
1 more request
POST /rayfold
authorization: Bearer u1
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      }
    }
... 2 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "error": {
    "code": "invalid_argument",
    "message": "placeOrder(): commands require an idempotency key of 16-128 characters"
  },
  "fin": true
}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      }
    }
  ]
}

Errors and bad input

What the app learns when something goes wrong.

An order fails because a book is out of stock.

Rayfold ahead

The app needs to know what went wrong, with details, to show a helpful message.

Measured: how a client learns the error type (declared in the contract (1 = yes), higher is better)

RESTREST: no declared in the contract (1 = yes)noGraphQLGraphQL: no declared in the contract (1 = yes)noRayfoldRayfold: yes declared in the contract (1 = yes)yes
REST
HTTP 409 + body shape by convention, undocumented
GraphQL
HTTP 200, errors[].extensions.code by convention, data: null
Rayfold
declared `throws OutOfStock { bookId, available }`, typed payload, generated client union
See the real requests and responses (3)

REST 1 request

POST /orders
authorization: Bearer u1
content-type: application/json

{
  "lines": [
    {
      "bookId": "b4",
      "qty": 1
    }
  ]
}
409 Conflict
content-type: application/json

{
  "error": "out_of_stock",
  "bookId": "b4",
  "available": 0
}

GraphQL 1 request

POST /graphql
authorization: Bearer u1
content-type: application/json

{
  "query": "mutation { placeOrder(lines: [{ bookId: \"b4\", qty: 1 }]) { id } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "errors": [
    {
      "message": "Only 0 of A Wizard of Earthsea left",
      "locations": [
        {
          "line": 1,
          "column": 12
        }
      ],
      "path": [
        "placeOrder"
      ],
      "extensions": {
        "code": "OUT_OF_STOCK",
        "bookId": "b4",
... 6 more lines
Full response body
{
  "errors": [
    {
      "message": "Only 0 of A Wizard of Earthsea left",
      "locations": [
        {
          "line": 1,
          "column": 12
        }
      ],
      "path": [
        "placeOrder"
      ],
      "extensions": {
        "code": "OUT_OF_STOCK",
        "bookId": "b4",
        "available": 0
      }
    }
  ],
  "data": null
}

Rayfold 1 request

POST /rayfold
authorization: Bearer u1
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b4",
              "qty": 1
            }
          ]
        }
      },
      "key": "e2e-oos-0000000001"
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "error": {
    "code": "domain",
    "message": "Only 0 of A Wizard of Earthsea left",
    "type": "OutOfStock",
    "data": {
      "bookId": "b4",
      "available": 0
    }
  },
  "fin": true
}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b4",
              "qty": 1
            }
          ]
        }
      },
      "key": "e2e-oos-0000000001"
    }
  ]
}

A client sends a wrong quantity: first the text 'two', then 0.

Rayfold ahead

Bad input that reaches your business code can create wrong orders.

Measured: rejected before side effects? (of 2 bad requests rejected before side effects, higher is better)

RESTREST: 0 of 2 bad requests rejected before side effects0GraphQLGraphQL: 1 of 2 bad requests rejected before side effects1RayfoldRayfold: 2 of 2 bad requests rejected before side effects2
REST
neither (orders created with NaN and 0 quantity)
GraphQL
type error only; qty 0 creates an order
Rayfold
both: type system plus @range(min: 1) declared in the schema

constraints live in the contract, so generated clients, agents and docs see them too

See the real requests and responses (6)

REST 2 requests

POST /orders
authorization: Bearer u1
content-type: application/json

{
  "lines": [
    {
      "bookId": "b1",
      "qty": "two"
    }
  ]
}
201 Created
content-type: application/json
location: /orders/o1

{
  "id": "o1",
  "status": "PLACED",
  "customerId": "u1",
  "items": [
    {
      "bookId": "b1",
      "qty": "two",
      "unitPrice": "12.99"
    }
  ],
  "total": "NaN"
}
POST /orders
authorization: Bearer u1
content-type: application/json

{
  "lines": [
    {
      "bookId": "b1",
      "qty": 0
    }
  ]
}
201 Created
content-type: application/json
location: /orders/o2

{
  "id": "o2",
  "status": "PLACED",
  "customerId": "u1",
  "items": [
    {
      "bookId": "b1",
      "qty": 0,
      "unitPrice": "12.99"
    }
  ],
  "total": "0.00"
}

GraphQL 2 requests

POST /graphql
authorization: Bearer u1
content-type: application/json

{
  "query": "mutation { placeOrder(lines: [{ bookId: \"b1\", qty: \"two\" }]) { id } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "errors": [
    {
      "message": "Int cannot represent non-integer value: \"two\"",
      "locations": [
        {
          "line": 1,
          "column": 52
        }
      ]
    }
  ]
}
POST /graphql
authorization: Bearer u1
content-type: application/json

{
  "query": "mutation { placeOrder(lines: [{ bookId: \"b1\", qty: 0 }]) { id } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "placeOrder": {
      "id": "o1"
    }
  }
}

Rayfold 2 requests

POST /rayfold
authorization: Bearer u1
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b1",
              "qty": "two"
            }
          ]
        }
      },
      "key": "e2e-bad-00000000001"
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "error": {
    "code": "invalid_argument",
    "message": "placeOrder().input.lines.0.qty: expected Int"
  },
  "fin": true
}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b1",
              "qty": "two"
            }
          ]
        }
      },
      "key": "e2e-bad-00000000001"
    }
  ]
}
POST /rayfold
authorization: Bearer u1
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b1",
              "qty": 0
            }
          ]
        }
      },
      "key": "e2e-bad-00000000002"
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "error": {
    "code": "invalid_argument",
    "message": "placeOrder().input.lines.0.qty: must be >= 1"
  },
  "fin": true
}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b1",
              "qty": 0
            }
          ]
        }
      },
      "key": "e2e-bad-00000000002"
    }
  ]
}

Access control and protection

Who may see what, and how expensive a single request may be.

Only a book's owner may see its cost price.

Rayfold ahead

Permission checks written by hand in every handler are easy to forget in one place.

Measured: where the rule lives / what a denied caller sees (rule in the contract, explicit denial (1 = yes), higher is better)

RESTREST: no rule in the contract, explicit denial (1 = yes)noGraphQLGraphQL: no rule in the contract, explicit denial (1 = yes)noRayfoldRayfold: yes rule in the contract, explicit denial (1 = yes)yes
REST
in each handler; field omitted
GraphQL
in each resolver; null (ambiguous)
Rayfold
in the schema (`@allow`); explicit unauthenticated/permission_denied with path, default view omits it

Rayfold's `rayfold check` warns when a policy is added or removed

See the real requests and responses (8)

REST 2 requests

GET /books/b1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "448f56b82184d34f"

{
  "id": "b1",
  "title": "The Dispossessed",
  "format": "PAPERBACK",
  "price": "12.99",
  "stock": 5,
  "authorId": "a1",
  "ownerId": "u1"
}
GET /books/b1
authorization: Bearer u1
200 OK
cache-control: private, max-age=60
content-type: application/json
etag: "48dabfb775d04fcf"

{
  "id": "b1",
  "title": "The Dispossessed",
  "format": "PAPERBACK",
  "price": "12.99",
  "stock": 5,
  "authorId": "a1",
  "ownerId": "u1",
  "costPrice": "6.10"
}

GraphQL 2 requests

POST /graphql
content-type: application/json

{
  "query": "{ book(id: \"b1\") { costPrice } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "book": {
      "costPrice": null
    }
  }
}
POST /graphql
authorization: Bearer u1
content-type: application/json

{
  "query": "{ book(id: \"b1\") { costPrice } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "book": {
      "costPrice": "6.10"
    }
  }
}

Rayfold 4 requests

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      },
      "shape": "{ id costPrice }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "error": {
    "code": "unauthenticated",
    "message": "Sign in to access Book.costPrice",
    "path": "costPrice"
  },
  "fin": true
}
POST /rayfold
authorization: Bearer u2
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      },
      "shape": "{ id costPrice }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "error": {
    "code": "permission_denied",
    "message": "Not allowed to access Book.costPrice",
    "path": "costPrice"
  },
  "fin": true
}
2 more requests
POST /rayfold
authorization: Bearer u1
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      },
      "shape": "{ id costPrice }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "$type": "Book",
    "id": "b1",
    "costPrice": "6.10"
  },
  "meta": {
    "cost": 1
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      }
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "$type": "Book",
    "id": "b1",
    "title": "The Dispossessed",
    "format": "PAPERBACK",
    "price": "12.99",
    "stock": 5,
    "author": {
      "$type": "Author",
      "id": "a1",
      "name": "Ursula K. Le Guin"
    }
  },
  "meta": {
... 4 more lines
Full response body
{
  "id": 1,
  "data": {
    "$type": "Book",
    "id": "b1",
    "title": "The Dispossessed",
    "format": "PAPERBACK",
    "price": "12.99",
    "stock": 5,
    "author": {
      "$type": "Author",
      "id": "a1",
      "name": "Ursula K. Le Guin"
    }
  },
  "meta": {
    "cost": 2
  },
  "fin": true
}

A client asks for 200 books, each with 200 books, each with 200 books.

Rayfold ahead

One expensive request can slow the service down for everyone.

Measured: rejected before execution? (rejected before execution (1 = yes), higher is better)

RESTREST: no rejected before execution (1 = yes)noGraphQLGraphQL: no rejected before execution (1 = yes)noRayfoldRayfold: yes rejected before execution (1 = yes)yes
REST
n/a (no query language)
GraphQL
no, unless a cost plugin is added
Rayfold
yes: static cost vs budget, from @cost and page sizes
See the real requests and responses (5)

REST 0 requests

No HTTP request on this stack for this step.

GraphQL 1 request

POST /graphql
content-type: application/json

{
  "query": "{ books(first: 200) { items { id author { name } } } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "b1",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b10",
          "author": {
            "name": "Chimamanda Ngozi Adichie"
          }
        },
... 208 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "b1",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b10",
          "author": {
            "name": "Chimamanda Ngozi Adichie"
          }
        },
        {
          "id": "b11",
          "author": {
            "name": "Kazuo Ishiguro"
          }
        },
        {
          "id": "b12",
          "author": {
            "name": "Kazuo Ishiguro"
          }
        },
        {
          "id": "b13",
          "author": {
            "name": "Kazuo Ishiguro"
          }
        },
        {
          "id": "b14",
          "author": {
            "name": "Jorge Luis Borges"
          }
        },
        {
          "id": "b15",
          "author": {
            "name": "Jorge Luis Borges"
          }
        },
        {
          "id": "b16",
          "author": {
            "name": "Virginia Woolf"
          }
        },
        {
          "id": "b17",
          "author": {
            "name": "Virginia Woolf"
          }
        },
        {
          "id": "b18",
          "author": {
            "name": "Virginia Woolf"
          }
        },
        {
          "id": "b19",
          "author": {
            "name": "Haruki Murakami"
          }
        },
        {
          "id": "b2",
          "author": {
            "name": "Italo Calvino"
          }
        },
        {
          "id": "b20",
          "author": {
            "name": "Haruki Murakami"
          }
        },
        {
          "id": "b21",
          "author": {
            "name": "N. K. Jemisin"
          }
        },
        {
          "id": "b22",
          "author": {
            "name": "N. K. Jemisin"
          }
        },
        {
          "id": "b23",
          "author": {
            "name": "N. K. Jemisin"
          }
        },
        {
          "id": "b24",
          "author": {
            "name": "Ted Chiang"
          }
        },
        {
          "id": "b25",
          "author": {
            "name": "Ted Chiang"
          }
        },
        {
          "id": "b26",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b27",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b28",
          "author": {
            "name": "Italo Calvino"
          }
        },
        {
          "id": "b29",
          "author": {
            "name": "Italo Calvino"
          }
        },
        {
          "id": "b3",
          "author": {
            "name": "Octavia E. Butler"
          }
        },
        {
          "id": "b30",
          "author": {
            "name": "Octavia E. Butler"
          }
        },
        {
          "id": "b31",
          "author": {
            "name": "Octavia E. Butler"
          }
        },
        {
          "id": "b32",
          "author": {
            "name": "Toni Morrison"
          }
        },
        {
          "id": "b33",
          "author": {
            "name": "Gabriel García Márquez"
          }
        },
        {
          "id": "b34",
          "author": {
            "name": "Chimamanda Ngozi Adichie"
          }
        },
        {
          "id": "b35",
          "author": {
            "name": "Haruki Murakami"
          }
        },
        {
          "id": "b36",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b4",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b5",
          "author": {
            "name": "Toni Morrison"
          }
        },
        {
          "id": "b6",
          "author": {
            "name": "Toni Morrison"
          }
        },
        {
          "id": "b7",
          "author": {
            "name": "Gabriel García Márquez"
          }
        },
        {
          "id": "b8",
          "author": {
            "name": "Gabriel García Márquez"
          }
        },
        {
          "id": "b9",
          "author": {
            "name": "Chimamanda Ngozi Adichie"
          }
        }
      ]
    }
  }
}

Rayfold 4 requests

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id author { books(page: { first: 200 }) { items { id author { books(page: { first: 200 }) { items { id } } } } } } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "error": {
    "code": "resource_exhausted",
    "message": "Batch cost 8160806 exceeds budget 1000",
    "data": {
      "cost": 8160806,
      "budget": 1000
    }
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 2
        }
      },
      "shape": "{ items { id author { books(page: { first: 2 }) { items { id author { books(page: { first: 2 }) { items { id } } } } } } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Book",
        "id": "b1",
        "author": {
          "$type": "Author",
          "books": {
            "items": [
              {
                "$type": "Book",
                "id": "b1",
                "author": {
                  "$type": "Author",
... 93 more lines
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Book",
        "id": "b1",
        "author": {
          "$type": "Author",
          "books": {
            "items": [
              {
                "$type": "Book",
                "id": "b1",
                "author": {
                  "$type": "Author",
                  "books": {
                    "items": [
                      {
                        "$type": "Book",
                        "id": "b1"
                      },
                      {
                        "$type": "Book",
                        "id": "b26"
                      }
                    ]
                  }
                }
              },
              {
                "$type": "Book",
                "id": "b26",
                "author": {
                  "$type": "Author",
                  "books": {
                    "items": [
                      {
                        "$type": "Book",
                        "id": "b1"
                      },
                      {
                        "$type": "Book",
                        "id": "b26"
                      }
                    ]
                  }
                }
              }
            ]
          }
        }
      },
      {
        "$type": "Book",
        "id": "b10",
        "author": {
          "$type": "Author",
          "books": {
            "items": [
              {
                "$type": "Book",
                "id": "b10",
                "author": {
                  "$type": "Author",
                  "books": {
                    "items": [
                      {
                        "$type": "Book",
                        "id": "b10"
                      },
                      {
                        "$type": "Book",
                        "id": "b34"
                      }
                    ]
                  }
                }
              },
              {
                "$type": "Book",
                "id": "b34",
                "author": {
                  "$type": "Author",
                  "books": {
                    "items": [
                      {
                        "$type": "Book",
                        "id": "b10"
                      },
                      {
                        "$type": "Book",
                        "id": "b34"
                      }
                    ]
                  }
                }
              }
            ]
          }
        }
      }
    ]
  },
  "meta": {
    "cost": 38
  },
  "fin": true
}
2 more requests
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 1
        }
      },
      "shape": "{ items { id author { books(page: { first: 1 }) { items { id author { books(page: { first: 1 }) { items { id author { books(page: { first: 1 }) { items { id } } } } } } } } } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "error": {
    "code": "resource_exhausted",
    "message": "Shape depth 11 exceeds 8"
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 1
        }
      },
      "shape": "{ items { id author { books(page: { first: 1 }) { items { id author { books(page: { first: 1 }) { items { id } } } } } } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Book",
        "id": "b1",
        "author": {
          "$type": "Author",
          "books": {
            "items": [
              {
                "$type": "Book",
                "id": "b1",
                "author": {
                  "$type": "Author",
... 21 more lines
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Book",
        "id": "b1",
        "author": {
          "$type": "Author",
          "books": {
            "items": [
              {
                "$type": "Book",
                "id": "b1",
                "author": {
                  "$type": "Author",
                  "books": {
                    "items": [
                      {
                        "$type": "Book",
                        "id": "b1"
                      }
                    ]
                  }
                }
              }
            ]
          }
        }
      }
    ]
  },
  "meta": {
    "cost": 15
  },
  "fin": true
}

Caching and live data

Keeping screens fast, cheap and correct.

Serve a popular product page from a shared cache, such as a CDN.

Rayfold ahead

An answer from a cache near the user is fast and costs your servers nothing.

Measured: repeat view through a shared cache (bytes on the repeat view (headers + body), lower is better)

RESTREST: 486 bytes on the repeat view (headers + body)486GraphQLGraphQL: 355 bytes on the repeat view (headers + body)355RayfoldRayfold: 344 bytes on the repeat view (headers + body)344
REST
3 revalidations (3 x 304), 486 B
GraphQL
1 uncacheable POST, 355 B
Rayfold
1 safe batch, 1 x 304, 344 B

Rayfold derives Cache-Control from @cache and policies; viewer-guarded data is private automatically

See the real requests and responses (11)

REST 6 requests

GET /books/b1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "448f56b82184d34f"

{
  "id": "b1",
  "title": "The Dispossessed",
  "format": "PAPERBACK",
  "price": "12.99",
  "stock": 5,
  "authorId": "a1",
  "ownerId": "u1"
}
GET /authors/a1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "28bbc6e5edb7fc7e"

{
  "id": "a1",
  "name": "Ursula K. Le Guin",
  "bio": "American author of speculative fiction."
}
4 more requests
GET /reviews?bookId=b1&limit=3
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "cb5cb358af1b2242"

{
  "items": [
    {
      "id": "r1",
      "rating": 5,
      "body": "Ambiguous utopia, unambiguous masterpiece.",
      "bookId": "b1",
      "reviewerId": "u2",
      "version": 1
    },
    {
      "id": "r4",
      "rating": 3,
      "body": "Slow start.",
      "bookId": "b1",
      "reviewerId": "u3",
... 4 more lines
Full response body
{
  "items": [
    {
      "id": "r1",
      "rating": 5,
      "body": "Ambiguous utopia, unambiguous masterpiece.",
      "bookId": "b1",
      "reviewerId": "u2",
      "version": 1
    },
    {
      "id": "r4",
      "rating": 3,
      "body": "Slow start.",
      "bookId": "b1",
      "reviewerId": "u3",
      "version": 1
    }
  ]
}
GET /books/b1
if-none-match: "448f56b82184d34f"
304 Not Modified
cache-control: public, max-age=60
etag: "448f56b82184d34f"
GET /authors/a1
if-none-match: "28bbc6e5edb7fc7e"
304 Not Modified
cache-control: public, max-age=60
etag: "28bbc6e5edb7fc7e"
GET /reviews?bookId=b1&limit=3
if-none-match: "cb5cb358af1b2242"
304 Not Modified
cache-control: public, max-age=60
etag: "cb5cb358af1b2242"

GraphQL 2 requests

POST /graphql
content-type: application/json

{
  "query": "{ book(id: \"b1\") { id title author { name } reviews(first: 3) { id rating } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "book": {
      "id": "b1",
      "title": "The Dispossessed",
      "author": {
        "name": "Ursula K. Le Guin"
      },
      "reviews": [
        {
          "id": "r1",
          "rating": 5
        },
        {
          "id": "r4",
          "rating": 3
... 5 more lines
Full response body
{
  "data": {
    "book": {
      "id": "b1",
      "title": "The Dispossessed",
      "author": {
        "name": "Ursula K. Le Guin"
      },
      "reviews": [
        {
          "id": "r1",
          "rating": 5
        },
        {
          "id": "r4",
          "rating": 3
        }
      ]
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "{ book(id: \"b1\") { id title author { name } reviews(first: 3) { id rating } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "book": {
      "id": "b1",
      "title": "The Dispossessed",
      "author": {
        "name": "Ursula K. Le Guin"
      },
      "reviews": [
        {
          "id": "r1",
          "rating": 5
        },
        {
          "id": "r4",
          "rating": 3
... 5 more lines
Full response body
{
  "data": {
    "book": {
      "id": "b1",
      "title": "The Dispossessed",
      "author": {
        "name": "Ursula K. Le Guin"
      },
      "reviews": [
        {
          "id": "r1",
          "rating": 5
        },
        {
          "id": "r4",
          "rating": 3
        }
      ]
    }
  }
}

Rayfold 3 requests

POST /rayfold
content-type: application/rayfold+json
rayfold-safe: true

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      },
      "shape": "{ id title author { name } reviews(page: { first: 3 }) { items { id rating } } }"
    }
  ]
}
200 OK
cache-control: public, max-age=60
content-type: application/rayfold-frames+json
etag: "sha256-1a9004707c0a94e790d7b9c5ea61fb3f2c641ea488b43df8eb50fdd40839b23b"

{
  "id": 1,
  "data": {
    "$type": "Book",
    "id": "b1",
    "title": "The Dispossessed",
    "author": {
      "$type": "Author",
      "name": "Ursula K. Le Guin"
    },
    "reviews": {
      "items": [
        {
          "$type": "Review",
          "id": "r1",
          "rating": 5
... 14 more lines
Full response body
{
  "id": 1,
  "data": {
    "$type": "Book",
    "id": "b1",
    "title": "The Dispossessed",
    "author": {
      "$type": "Author",
      "name": "Ursula K. Le Guin"
    },
    "reviews": {
      "items": [
        {
          "$type": "Review",
          "id": "r1",
          "rating": 5
        },
        {
          "$type": "Review",
          "id": "r4",
          "rating": 3
        }
      ]
    }
  },
  "meta": {
    "cost": 7
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json
if-none-match: "sha256-1a9004707c0a94e790d7b9c5ea61fb3f2c641ea488b43df8eb50fdd40839b23b"
rayfold-safe: true

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      },
      "shape": "{ id title author { name } reviews(page: { first: 3 }) { items { id rating } } }"
    }
  ]
}
304 Not Modified
cache-control: public, max-age=60
etag: "sha256-1a9004707c0a94e790d7b9c5ea61fb3f2c641ea488b43df8eb50fdd40839b23b"
1 more request
GET /rayfold/order?a=eyJpZCI6Im8xIn0
authorization: Bearer u1
200 OK
cache-control: private, max-age=0, no-cache
content-type: application/rayfold-frames+json
etag: "sha256-1233f8eaec85365829104f897cf9f44339e436b423200dbd5b66ddee90603f40"

{
  "id": 1,
  "data": null,
  "meta": {
    "cost": 3
  },
  "fin": true
}

After an order, the book list already on screen must show the new stock.

Rayfold ahead

Stale screens confuse people, and reloading everything costs requests.

Measured: requests to make the earlier view correct (extra requests to be correct, lower is better)

RESTREST: 1 extra requests to be correct1GraphQLGraphQL: 1 extra requests to be correct1RayfoldRayfold: 0 extra requests to be correct0
REST
1 refetch (or a stale UI)
GraphQL
1 refetch: a normalized cache only learns what the mutation selected, and stock was a side effect
Rayfold
0: the server sends the stock change as a patch even though the command selected only the order
See the real requests and responses (6)

REST 2 requests

GET /books?limit=5
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "b81d0f6498ed0df8"

{
  "items": [
    {
      "id": "b1",
      "title": "The Dispossessed",
      "format": "PAPERBACK",
      "price": "12.99",
      "stock": 5,
      "authorId": "a1",
      "ownerId": "u1"
    },
    {
      "id": "b10",
      "title": "Americanah",
      "format": "HARDCOVER",
      "price": "27.00",
... 34 more lines
Full response body
{
  "items": [
    {
      "id": "b1",
      "title": "The Dispossessed",
      "format": "PAPERBACK",
      "price": "12.99",
      "stock": 5,
      "authorId": "a1",
      "ownerId": "u1"
    },
    {
      "id": "b10",
      "title": "Americanah",
      "format": "HARDCOVER",
      "price": "27.00",
      "stock": 4,
      "authorId": "a6",
      "ownerId": "u2"
    },
    {
      "id": "b11",
      "title": "The Remains of the Day",
      "format": "PAPERBACK",
      "price": "8.99",
      "stock": 12,
      "authorId": "a7",
      "ownerId": "u1"
    },
    {
      "id": "b12",
      "title": "Never Let Me Go",
      "format": "EBOOK",
      "price": "6.99",
      "stock": 1000,
      "authorId": "a7",
      "ownerId": "u1"
    },
    {
      "id": "b13",
      "title": "Klara and the Sun",
      "format": "HARDCOVER",
      "price": "28.00",
      "stock": 7,
      "authorId": "a7",
      "ownerId": "u2"
    }
  ],
  "total": 36
}
POST /orders
authorization: Bearer u1
content-type: application/json
idempotency-key: k-rest-coh

{
  "lines": [
    {
      "bookId": "b1",
      "qty": 1
    }
  ]
}
201 Created
content-type: application/json
location: /orders/o1

{
  "id": "o1",
  "status": "PLACED",
  "customerId": "u1",
  "items": [
    {
      "bookId": "b1",
      "qty": 1,
      "unitPrice": "12.99"
    }
  ],
  "total": "12.99"
}

GraphQL 2 requests

POST /graphql
content-type: application/json

{
  "query": "{ books(first: 5) { items { __typename id stock } } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "__typename": "Book",
          "id": "b1",
          "stock": 5
        },
        {
          "__typename": "Book",
          "id": "b10",
          "stock": 4
        },
        {
          "__typename": "Book",
... 17 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "__typename": "Book",
          "id": "b1",
          "stock": 5
        },
        {
          "__typename": "Book",
          "id": "b10",
          "stock": 4
        },
        {
          "__typename": "Book",
          "id": "b11",
          "stock": 12
        },
        {
          "__typename": "Book",
          "id": "b12",
          "stock": 1000
        },
        {
          "__typename": "Book",
          "id": "b13",
          "stock": 7
        }
      ]
    }
  }
}
POST /graphql
authorization: Bearer u1
content-type: application/json

{
  "query": "mutation { placeOrder(lines: [{ bookId: \"b1\", qty: 1 }]) { __typename id status total } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "placeOrder": {
      "__typename": "Order",
      "id": "o1",
      "status": "PLACED",
      "total": "12.99"
    }
  }
}

Rayfold 2 requests

POST /rayfold
accept: application/rayfold-frames+json
authorization: Bearer u1
content-type: application/rayfold+json

{
  "rayfold": "0.1",
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 5
        }
      },
      "shape": "{ items { id stock } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Book",
        "id": "b1",
        "stock": 5
      },
      {
        "$type": "Book",
        "id": "b10",
        "stock": 4
      },
      {
        "$type": "Book",
... 20 more lines
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Book",
        "id": "b1",
        "stock": 5
      },
      {
        "$type": "Book",
        "id": "b10",
        "stock": 4
      },
      {
        "$type": "Book",
        "id": "b11",
        "stock": 12
      },
      {
        "$type": "Book",
        "id": "b12",
        "stock": 1000
      },
      {
        "$type": "Book",
        "id": "b13",
        "stock": 7
      }
    ]
  },
  "meta": {
    "cost": 11
  },
  "fin": true
}
POST /rayfold
accept: application/rayfold-frames+json
authorization: Bearer u1
content-type: application/rayfold+json

{
  "rayfold": "0.1",
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b1",
              "qty": 1
            }
          ]
        }
      },
... 5 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "$type": "Order",
    "id": "o1",
    "status": "PLACED",
    "total": "12.99"
  },
  "patch": [
    {
      "set": "Order:o1",
      "value": {
        "$type": "Order",
        "id": "o1",
        "status": "PLACED",
        "total": "12.99"
... 14 more lines
Full request body
{
  "rayfold": "0.1",
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b1",
              "qty": 1
            }
          ]
        }
      },
      "shape": "{ id status total }",
      "key": "178ec82ade7946a9b55792c7793e5f16"
    }
  ]
}
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Order",
    "id": "o1",
    "status": "PLACED",
    "total": "12.99"
  },
  "patch": [
    {
      "set": "Order:o1",
      "value": {
        "$type": "Order",
        "id": "o1",
        "status": "PLACED",
        "total": "12.99"
      }
    },
    {
      "set": "Book:b1",
      "value": {
        "stock": 4
      }
    }
  ],
  "meta": {
    "cost": 1
  },
  "fin": true
}

Show stock changes live while the page is open.

Rayfold ahead

A second system only for live updates is more code to build, secure and run.

Measured: what the developer writes (pieces the developer writes, lower is better)

RESTREST: 3 pieces the developer writes3GraphQLGraphQL: 4 pieces the developer writes4RayfoldRayfold: 1 pieces the developer writes1
REST
an SSE endpoint + event fan-out + client merge code
GraphQL
a Subscription type + resolver + async iterator + client merge code
Rayfold
`live: true` on the existing query; server diffs, client cache patched

Rayfold: the subscription reuses shape, policies and cache

See the real requests and responses (6)

REST 2 requests

GET /events
200 OK
cache-control: no-store
content-type: text/event-stream

: connected

data: {"bookId":"b2","stock":3}


(stream closed by the client)
POST /books/b2?action=restock&qty=1
authorization: Bearer admin
content-type: application/json

{}
200 OK
content-type: application/json

{
  "id": "b2",
  "title": "Invisible Cities",
  "format": "HARDCOVER",
  "price": "19.50",
  "stock": 3,
  "authorId": "a2",
  "ownerId": "u2",
  "costPrice": "9.00"
}

GraphQL 2 requests

POST /graphql
content-type: application/json

{
  "query": "subscription { stockChanged(bookId: \"b2\") { bookId stock } }"
}
200 OK
cache-control: no-store
content-type: text/event-stream

: subscribed

data: {"data":{"stockChanged":{"bookId":"b2","stock":3}}}


(stream closed by the client)
POST /graphql
authorization: Bearer admin
content-type: application/json

{
  "query": "mutation { restock(bookId: \"b2\", qty: 1) { stock } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "restock": {
      "stock": 3
    }
  }
}

Rayfold 2 requests

POST /rayfold
accept: application/rayfold-frames+json
authorization: Bearer u1
content-type: application/rayfold+json

{
  "rayfold": "0.1",
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b2"
      },
      "shape": "{ id stock }",
      "live": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"$type":"Book","id":"b2","stock":2},"meta":{"cost":1}}
{"id":1,"patch":[{"set":"Book:b2","value":{"stock":3}}]}

(stream closed by the client)
POST /rayfold
accept: application/rayfold-frames+json
authorization: Bearer admin
content-type: application/rayfold+json

{
  "rayfold": "0.1",
  "ops": [
    {
      "id": 1,
      "op": "restock",
      "args": {
        "bookId": "b2",
        "qty": 1
      },
      "key": "f8af882525954dc19fded720df98513d"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "$type": "Book",
    "id": "b2",
    "title": "Invisible Cities",
    "format": "HARDCOVER",
    "price": "19.50",
    "stock": 3,
    "author": {
      "$type": "Author",
      "id": "a2",
      "name": "Italo Calvino"
    }
  },
  "patch": [
... 28 more lines
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Book",
    "id": "b2",
    "title": "Invisible Cities",
    "format": "HARDCOVER",
    "price": "19.50",
    "stock": 3,
    "author": {
      "$type": "Author",
      "id": "a2",
      "name": "Italo Calvino"
    }
  },
  "patch": [
    {
      "set": "Book:b2",
      "value": {
        "$type": "Book",
        "id": "b2",
        "title": "Invisible Cities",
        "format": "HARDCOVER",
        "price": "19.50",
        "stock": 3,
        "author": {
          "$ref": "Author:a2"
        }
      }
    },
    {
      "set": "Author:a2",
      "value": {
        "$type": "Author",
        "id": "a2",
        "name": "Italo Calvino"
      }
    }
  ],
  "meta": {
    "cost": 2
  },
  "fin": true
}

Changing the API over time

Removing things without breaking the apps that depend on them.

Remove a field from the API without breaking the apps that still use it.

Rayfold ahead

APIs live for years. A safe way to remove things keeps them clean without outages.

Measured: what the tooling decides (removals decided right, of 3 (unannounced, before sunset, after sunset), higher is better)

RESTREST: 1 removals decided right, of 3 (unannounced, before sunset, after sunset)1GraphQLGraphQL: 2 removals decided right, of 3 (unannounced, before sunset, after sunset)2RayfoldRayfold: 3 removals decided right, of 3 (unannounced, before sunset, after sunset)3
REST
no field-level contract to diff: every removal ships, announced or not
GraphQL
graphql-js findBreakingChanges flags every removal; @deprecated has no date, so a finished deprecation is flagged too
Rayfold
`rayfold check` blocks unannounced and early removals and allows them after @deprecated(sunset:)

Removing Review.body. rayfold check: breaking:field-removed / breaking:field-removed / compatible:field-removed-after-sunset. graphql-js: "Field Review.body was removed." in all three cases.

See the real requests and responses (2)

REST 1 request

the published contract a diff tool would compare

GET /openapi.json
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "4bb8237a4458deae"

{
  "openapi": "3.1.0",
  "paths": {
    "/books": {},
    "/books/{id}": {},
    "/authors/{id}": {},
    "/reviews": {},
    "/orders": {},
    "/orders/{id}": {}
  }
}

GraphQL 1 request

what a client or a tool can learn about Review.body

POST /graphql
content-type: application/json

{
  "query": "{ __type(name: \"Review\") { fields(includeDeprecated: true) { name isDeprecated deprecationReason } } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "__type": {
      "fields": [
        {
          "name": "id",
          "isDeprecated": false,
          "deprecationReason": null
        },
        {
          "name": "rating",
          "isDeprecated": false,
          "deprecationReason": null
        },
        {
          "name": "body",
... 12 more lines
Full response body
{
  "data": {
    "__type": {
      "fields": [
        {
          "name": "id",
          "isDeprecated": false,
          "deprecationReason": null
        },
        {
          "name": "rating",
          "isDeprecated": false,
          "deprecationReason": null
        },
        {
          "name": "body",
          "isDeprecated": false,
          "deprecationReason": null
        },
        {
          "name": "reviewerId",
          "isDeprecated": false,
          "deprecationReason": null
        }
      ]
    }
  }
}

Rayfold 0 requests

No HTTP request on this stack for this step.

AI agents

Letting an assistant use the API with the same rules as any other client.

Let an AI assistant find and call the API, and try an order as a dry run first.

Rayfold ahead

Agents need typed tools, clear errors and a safe way to test an action before doing it.

Measured: extra work for tools with typed input/output (extra components to build, lower is better)

RESTREST: 2 extra components to build2GraphQLGraphQL: 2 extra components to build2RayfoldRayfold: 0 extra components to build0
REST
hand-written OpenAPI + adapter; no dry-run
GraphQL
introspection + custom glue; no dry-run
Rayfold
none: /mcp lists tools with JSON Schema, `.simulate` dry-runs, typed errors
See the real requests and responses (4)

REST 1 request

GET /openapi.json
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "4bb8237a4458deae"

{
  "openapi": "3.1.0",
  "paths": {
    "/books": {},
    "/books/{id}": {},
    "/authors/{id}": {},
    "/reviews": {},
    "/orders": {},
    "/orders/{id}": {}
  }
}

GraphQL 1 request

POST /graphql
content-type: application/json

{
  "query": "{ __schema { mutationType { fields { name } } } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "__schema": {
      "mutationType": {
        "fields": [
          {
            "name": "placeOrder"
          },
          {
            "name": "payOrder"
          },
          {
            "name": "restock"
          },
          {
            "name": "editReview"
... 12 more lines
Full response body
{
  "data": {
    "__schema": {
      "mutationType": {
        "fields": [
          {
            "name": "placeOrder"
          },
          {
            "name": "payOrder"
          },
          {
            "name": "restock"
          },
          {
            "name": "editReview"
          },
          {
            "name": "updateBook"
          },
          {
            "name": "deleteReview"
          }
        ]
      }
    }
  }
}

Rayfold 2 requests

POST /mcp
content-type: application/json

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list"
}
200 OK
content-type: application/json

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "books",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "filter": {
              "anyOf": [
                {
                  "$ref": "#/$defs/BookFilter"
                },
... 6517 more lines
Full response body
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "books",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "filter": {
              "anyOf": [
                {
                  "$ref": "#/$defs/BookFilter"
                },
                {
                  "type": "null"
                }
              ]
            },
            "page": {
              "$ref": "#/$defs/PageArgs"
            }
          },
          "additionalProperties": false,
          "$defs": {
            "BookFilter": {
              "type": "object",
              "properties": {
                "titleContains": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "format": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "HARDCOVER",
                        "PAPERBACK",
                        "EBOOK"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "authorId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "maxPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false
            },
            "PageArgs": {
              "type": "object",
              "properties": {
                "first": {
                  "type": "integer"
                },
                "after": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "offset": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Page_Book"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "List books, newest first. Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "book",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Book"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "author",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Author"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "review",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Review"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "order",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Order"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Order": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Order"
                },
                "id": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLACED",
                    "PAID",
                    "SHIPPED",
                    "CANCELLED"
                  ]
                },
                "customerId": {
                  "type": "string"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/OrderItem"
                  }
                },
                "total": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "status",
                "customerId",
                "items",
                "total"
              ]
            },
            "OrderItem": {
              "type": "object",
              "properties": {
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "qty": {
                  "type": "integer"
                },
                "unitPrice": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "book",
                "qty",
                "unitPrice"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "myOrders",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "page": {
              "$ref": "#/$defs/PageArgs"
            }
          },
          "additionalProperties": false,
          "$defs": {
            "PageArgs": {
              "type": "object",
              "properties": {
                "first": {
                  "type": "integer"
                },
                "after": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "offset": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Page_Order"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Page_Order": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Order"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Order": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Order"
                },
                "id": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLACED",
                    "PAID",
                    "SHIPPED",
                    "CANCELLED"
                  ]
                },
                "customerId": {
                  "type": "string"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/OrderItem"
                  }
                },
                "total": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "status",
                "customerId",
                "items",
                "total"
              ]
            },
            "OrderItem": {
              "type": "object",
              "properties": {
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "qty": {
                  "type": "integer"
                },
                "unitPrice": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "book",
                "qty",
                "unitPrice"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "placeOrder",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "input": {
              "$ref": "#/$defs/OrderInput"
            }
          },
          "additionalProperties": false,
          "required": [
            "input"
          ],
          "$defs": {
            "OrderInput": {
              "type": "object",
              "properties": {
                "lines": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/OrderLine"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "lines"
              ]
            },
            "OrderLine": {
              "type": "object",
              "properties": {
                "bookId": {
                  "type": "string"
                },
                "qty": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 100
                  },
                  "minimum": 1,
                  "maximum": 100
                }
              },
              "additionalProperties": false,
              "required": [
                "bookId"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Order"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Order": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Order"
                },
                "id": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLACED",
                    "PAID",
                    "SHIPPED",
                    "CANCELLED"
                  ]
                },
                "customerId": {
                  "type": "string"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/OrderItem"
                  }
                },
                "total": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "status",
                "customerId",
                "items",
                "total"
              ]
            },
            "OrderItem": {
              "type": "object",
              "properties": {
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "qty": {
                  "type": "integer"
                },
                "unitPrice": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "book",
                "qty",
                "unitPrice"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Place an order. Fails atomically if any line is out of stock. May fail with: OutOfStock, PaymentDeclined. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "placeOrder.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "input": {
              "$ref": "#/$defs/OrderInput"
            }
          },
          "additionalProperties": false,
          "required": [
            "input"
          ],
          "$defs": {
            "OrderInput": {
              "type": "object",
              "properties": {
                "lines": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/OrderLine"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "lines"
              ]
            },
            "OrderLine": {
              "type": "object",
              "properties": {
                "bookId": {
                  "type": "string"
                },
                "qty": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 100
                  },
                  "minimum": 1,
                  "maximum": 100
                }
              },
              "additionalProperties": false,
              "required": [
                "bookId"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Order"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Order": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Order"
                },
                "id": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLACED",
                    "PAID",
                    "SHIPPED",
                    "CANCELLED"
                  ]
                },
                "customerId": {
                  "type": "string"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/OrderItem"
                  }
                },
                "total": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "status",
                "customerId",
                "items",
                "total"
              ]
            },
            "OrderItem": {
              "type": "object",
              "properties": {
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "qty": {
                  "type": "integer"
                },
                "unitPrice": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "book",
                "qty",
                "unitPrice"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Dry run of placeOrder: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "payOrder",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Order"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Order": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Order"
                },
                "id": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLACED",
                    "PAID",
                    "SHIPPED",
                    "CANCELLED"
                  ]
                },
                "customerId": {
                  "type": "string"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/OrderItem"
                  }
                },
                "total": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "status",
                "customerId",
                "items",
                "total"
              ]
            },
            "OrderItem": {
              "type": "object",
              "properties": {
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "qty": {
                  "type": "integer"
                },
                "unitPrice": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "book",
                "qty",
                "unitPrice"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Pay for a placed order. May fail with: PaymentDeclined, NotPayable. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "payOrder.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Order"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Order": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Order"
                },
                "id": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLACED",
                    "PAID",
                    "SHIPPED",
                    "CANCELLED"
                  ]
                },
                "customerId": {
                  "type": "string"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/OrderItem"
                  }
                },
                "total": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "status",
                "customerId",
                "items",
                "total"
              ]
            },
            "OrderItem": {
              "type": "object",
              "properties": {
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "qty": {
                  "type": "integer"
                },
                "unitPrice": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "book",
                "qty",
                "unitPrice"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Dry run of payOrder: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "cancelOrder",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Order"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Order": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Order"
                },
                "id": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLACED",
                    "PAID",
                    "SHIPPED",
                    "CANCELLED"
                  ]
                },
                "customerId": {
                  "type": "string"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/OrderItem"
                  }
                },
                "total": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "status",
                "customerId",
                "items",
                "total"
              ]
            },
            "OrderItem": {
              "type": "object",
              "properties": {
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "qty": {
                  "type": "integer"
                },
                "unitPrice": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "book",
                "qty",
                "unitPrice"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "May fail with: NotCancellable. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "cancelOrder.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Order"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Order": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Order"
                },
                "id": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLACED",
                    "PAID",
                    "SHIPPED",
                    "CANCELLED"
                  ]
                },
                "customerId": {
                  "type": "string"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/OrderItem"
                  }
                },
                "total": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "status",
                "customerId",
                "items",
                "total"
              ]
            },
            "OrderItem": {
              "type": "object",
              "properties": {
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "qty": {
                  "type": "integer"
                },
                "unitPrice": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$"
                }
              },
              "additionalProperties": false,
              "required": [
                "book",
                "qty",
                "unitPrice"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Dry run of cancelOrder: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "addReview",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "input": {
              "$ref": "#/$defs/ReviewInput"
            }
          },
          "additionalProperties": false,
          "required": [
            "input"
          ],
          "$defs": {
            "ReviewInput": {
              "type": "object",
              "properties": {
                "bookId": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 2000
                  },
                  "minLength": 1,
                  "maxLength": 2000
                }
              },
              "additionalProperties": false,
              "required": [
                "bookId",
                "rating",
                "body"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Review"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "addReview.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "input": {
              "$ref": "#/$defs/ReviewInput"
            }
          },
          "additionalProperties": false,
          "required": [
            "input"
          ],
          "$defs": {
            "ReviewInput": {
              "type": "object",
              "properties": {
                "bookId": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 2000
                  },
                  "minLength": 1,
                  "maxLength": 2000
                }
              },
              "additionalProperties": false,
              "required": [
                "bookId",
                "rating",
                "body"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Review"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Dry run of addReview: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "editReview",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "input": {
              "$ref": "#/$defs/ReviewEdit"
            }
          },
          "additionalProperties": false,
          "required": [
            "id",
            "input"
          ],
          "$defs": {
            "ReviewEdit": {
              "type": "object",
              "properties": {
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 2000
                  },
                  "minLength": 1,
                  "maxLength": 2000
                }
              },
              "additionalProperties": false,
              "required": [
                "rating",
                "body"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Review"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Replace a review's rating and text. Only its author (or an admin) may edit it. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "editReview.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "input": {
              "$ref": "#/$defs/ReviewEdit"
            }
          },
          "additionalProperties": false,
          "required": [
            "id",
            "input"
          ],
          "$defs": {
            "ReviewEdit": {
              "type": "object",
              "properties": {
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 2000
                  },
                  "minLength": 1,
                  "maxLength": 2000
                }
              },
              "additionalProperties": false,
              "required": [
                "rating",
                "body"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Review"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Dry run of editReview: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "updateBook",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "patch": {
              "$ref": "#/$defs/BookPatch"
            }
          },
          "additionalProperties": false,
          "required": [
            "id",
            "patch"
          ],
          "$defs": {
            "BookPatch": {
              "type": "object",
              "properties": {
                "title": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "price": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0
                  }
                },
                "stock": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0
                  },
                  "minimum": 0
                }
              },
              "additionalProperties": false,
              "description": "Partial update: absent fields are left unchanged."
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Book"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Change some fields of a book; fields not sent are left as they are. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "updateBook.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "patch": {
              "$ref": "#/$defs/BookPatch"
            }
          },
          "additionalProperties": false,
          "required": [
            "id",
            "patch"
          ],
          "$defs": {
            "BookPatch": {
              "type": "object",
              "properties": {
                "title": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "price": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0
                  }
                },
                "stock": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0
                  },
                  "minimum": 0
                }
              },
              "additionalProperties": false,
              "description": "Partial update: absent fields are left unchanged."
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Book"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Dry run of updateBook: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "deleteReview",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Review"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Delete a review. Only its author (or an admin) may delete it. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "deleteReview.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Review"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            },
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Dry run of deleteReview: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "restock",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "bookId": {
              "type": "string"
            },
            "qty": {
              "type": "integer"
            }
          },
          "additionalProperties": false,
          "required": [
            "bookId",
            "qty"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Book"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "restock.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "bookId": {
              "type": "string"
            },
            "qty": {
              "type": "integer"
            }
          },
          "additionalProperties": false,
          "required": [
            "bookId",
            "qty"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Book"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Book": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Book"
                },
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "enum": [
                    "HARDCOVER",
                    "PAPERBACK",
                    "EBOOK"
                  ]
                },
                "price": {
                  "type": "string",
                  "pattern": "^-?\\d+(\\.\\d+)?$",
                  "description": "Unit price in the store currency."
                },
                "stock": {
                  "type": "integer"
                },
                "author": {
                  "$ref": "#/$defs/Author"
                },
                "reviews": {
                  "$ref": "#/$defs/Page_Review"
                },
                "costPrice": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Only the owner (or an admin) can see the cost price."
                },
                "ownerId": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "title",
                "format",
                "price",
                "stock",
                "author",
                "reviews",
                "ownerId"
              ]
            },
            "Author": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Author"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "bio": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "books": {
                  "$ref": "#/$defs/Page_Book"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "books"
              ]
            },
            "Page_Book": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Book"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Review": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Review"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Review": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Review"
                },
                "id": {
                  "type": "string"
                },
                "rating": {
                  "type": "integer",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 5
                  },
                  "minimum": 1,
                  "maximum": 5
                },
                "body": {
                  "type": "string"
                },
                "book": {
                  "$ref": "#/$defs/Book"
                },
                "reviewerId": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every edit; send it back as ifVersion (or If-Match) to avoid lost updates."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "rating",
                "body",
                "book",
                "reviewerId",
                "version"
              ]
            }
          }
        },
        "description": "Dry run of restock: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      }
    ],
    "ttlMs": 300000,
    "cacheScope": "public"
  }
}
POST /mcp
authorization: Bearer u1
content-type: application/json

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "placeOrder.simulate",
    "arguments": {
      "input": {
        "lines": [
          {
            "bookId": "b3",
            "qty": 1
          }
        ]
      }
    }
... 2 more lines
200 OK
content-type: application/json

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\n  \"$type\": \"Order\",\n  \"id\": \"o1\",\n  \"status\": \"PLACED\",\n  \"total\": \"8.00\",\n  \"items\": [\n    {\n      \"qty\": 1,\n      \"unitPrice\": \"8.00\",\n      \"book\": {\n        \"$type\": \"Book\",\n        \"id\": \"b3\",\n        \"title\": \"Kindred\"\n      }\n    }\n  ]\n}"
      }
    ],
    "structuredContent": {
      "result": {
        "$type": "Order",
        "id": "o1",
        "status": "PLACED",
        "total": "8.00",
... 50 more lines
Full request body
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "placeOrder.simulate",
    "arguments": {
      "input": {
        "lines": [
          {
            "bookId": "b3",
            "qty": 1
          }
        ]
      }
    }
  }
}
Full response body
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\n  \"$type\": \"Order\",\n  \"id\": \"o1\",\n  \"status\": \"PLACED\",\n  \"total\": \"8.00\",\n  \"items\": [\n    {\n      \"qty\": 1,\n      \"unitPrice\": \"8.00\",\n      \"book\": {\n        \"$type\": \"Book\",\n        \"id\": \"b3\",\n        \"title\": \"Kindred\"\n      }\n    }\n  ]\n}"
      }
    ],
    "structuredContent": {
      "result": {
        "$type": "Order",
        "id": "o1",
        "status": "PLACED",
        "total": "8.00",
        "items": [
          {
            "qty": 1,
            "unitPrice": "8.00",
            "book": {
              "$type": "Book",
              "id": "b3",
              "title": "Kindred"
            }
          }
        ]
      },
      "effects": [
        {
          "set": "Order:o1",
          "value": {
            "$type": "Order",
            "id": "o1",
            "status": "PLACED",
            "total": "8.00",
            "items": [
              {
                "qty": 1,
                "unitPrice": "8.00",
                "book": {
                  "$ref": "Book:b3"
                }
              }
            ]
          }
        },
        {
          "set": "Book:b3",
          "value": {
            "$type": "Book",
            "id": "b3",
            "title": "Kindred"
          }
        },
        {
          "set": "Book:b3",
          "value": {
            "stock": 99
          }
        }
      ]
    },
    "resultType": "complete"
  }
}
HTTP methods

Every HTTP method, side by side

The same bookstore operation for each method, run against all three APIs. Rayfold answers REST-style routes through @http bindings and also shows its own batch format where that adds something.

GET

Read

Rayfold ahead

Load a product header: title, price and the author's name. Then load it again through a cache.

MeasuredRESTGraphQLRayfoldResult
HTTP requests for the view2: the book, then its author11: the default view embeds the author's nameLevel
request size (URL) (bytes)20 B across 2 URLs110 B: the whole query rides in the URL9 BRayfold ahead
repeat view revalidates with 304yes (ETag)yes (GET with ETag, as configured here)yes (ETag; Cache-Control derived from @cache)Level
cache entries when two clients list the fields in a different order2: book and author are separate resources2: each query text is its own URL1: shapes are canonicalized to one sha256 idRayfold ahead
See the real requests and responses (8)

REST 3 requests

GET /books/b1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "448f56b82184d34f"

{
  "id": "b1",
  "title": "The Dispossessed",
  "format": "PAPERBACK",
  "price": "12.99",
  "stock": 5,
  "authorId": "a1",
  "ownerId": "u1"
}
GET /authors/a1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "28bbc6e5edb7fc7e"

{
  "id": "a1",
  "name": "Ursula K. Le Guin",
  "bio": "American author of speculative fiction."
}
1 more request

repeat view: revalidation

GET /books/b1
if-none-match: "448f56b82184d34f"
304 Not Modified
cache-control: public, max-age=60
etag: "448f56b82184d34f"

GraphQL 2 requests

GET /graphql?query=%7B%20book(id%3A%20%22b1%22)%20%7B%20id%20title%20price%20author%20%7B%20name%20%7D%20%7D%20%7D
200 OK
cache-control: public, max-age=60
content-type: application/graphql-response+json
etag: "487279bf024c934f"

{
  "data": {
    "book": {
      "id": "b1",
      "title": "The Dispossessed",
      "price": "12.99",
      "author": {
        "name": "Ursula K. Le Guin"
      }
    }
  }
}

repeat view: revalidation

GET /graphql?query=%7B%20book(id%3A%20%22b1%22)%20%7B%20id%20title%20price%20author%20%7B%20name%20%7D%20%7D%20%7D
if-none-match: "487279bf024c934f"
304 Not Modified
cache-control: public, max-age=60
etag: "487279bf024c934f"

Rayfold 3 requests

GET /books/b1
200 OK
cache-control: public, max-age=60
content-type: application/json; charset=utf-8
etag: "sha256-8f8d16a82a909aced7784fcf9f28fd6f87acca800bfff137d2bc976e738835aa"

{
  "$type": "Book",
  "id": "b1",
  "title": "The Dispossessed",
  "format": "PAPERBACK",
  "price": "12.99",
  "stock": 5,
  "author": {
    "$type": "Author",
    "id": "a1",
    "name": "Ursula K. Le Guin"
  }
}

repeat view: revalidation

GET /books/b1
if-none-match: "sha256-8f8d16a82a909aced7784fcf9f28fd6f87acca800bfff137d2bc976e738835aa"
304 Not Modified
cache-control: public, max-age=60
etag: "sha256-8f8d16a82a909aced7784fcf9f28fd6f87acca800bfff137d2bc976e738835aa"
1 more request

custom shape by canonical id (same URL for either field order)

GET /rayfold/book?a=eyJpZCI6ImIxIn0&s=sha256:153ce81c09d8ea1c30ef6351510fcdd16f739b7e7107b27fd3b2f6a5cd8fb9e9
200 OK
cache-control: public, max-age=60
content-type: application/rayfold-frames+json
etag: "sha256-a2119eb103ea5c9da2ab7728b2b09cf3cbf0c5158e0174d18b2cfb9d586993c5"

{
  "id": 1,
  "data": {
    "$type": "Book",
    "id": "b1",
    "title": "The Dispossessed",
    "price": "12.99",
    "author": {
      "$type": "Author",
      "name": "Ursula K. Le Guin"
    }
  },
  "meta": {
    "cost": 2
  },
  "fin": true
... 1 more lines
Full response body
{
  "id": 1,
  "data": {
    "$type": "Book",
    "id": "b1",
    "title": "The Dispossessed",
    "price": "12.99",
    "author": {
      "$type": "Author",
      "name": "Ursula K. Le Guin"
    }
  },
  "meta": {
    "cost": 2
  },
  "fin": true
}

GraphQL over HTTP allows GET for queries only; mutations must use POST.

POST

Create

Rayfold ahead

Check out: place an order, then pay for it. Then send both steps again, as a client does when a response is lost.

MeasuredRESTGraphQLRayfoldResult
round trips for place + pay22: a mutation's result cannot feed the next mutation1: payOrder takes { "$ref": "1.id" }Rayfold ahead
retrying the whole checkout is safeno: the order replays, but the payment retry answers 409 although it succeededno: the retry places and pays a second orderyes: both commands replay their original resultsRayfold ahead
See the real requests and responses (10)

REST 3 requests

POST /orders
content-type: application/json
authorization: Bearer u1
idempotency-key: k-post-rest-00001

{
  "lines": [
    {
      "bookId": "b3",
      "qty": 1
    }
  ]
}
201 Created
content-type: application/json
location: /orders/o1

{
  "id": "o1",
  "status": "PLACED",
  "customerId": "u1",
  "items": [
    {
      "bookId": "b3",
      "qty": 1,
      "unitPrice": "8.00"
    }
  ],
  "total": "8.00"
}
POST /orders/o1/pay
authorization: Bearer u1
200 OK
content-type: application/json

{
  "id": "o1",
  "status": "PAID",
  "customerId": "u1",
  "items": [
    {
      "bookId": "b3",
      "qty": 1,
      "unitPrice": "8.00"
    }
  ],
  "total": "8.00"
}
1 more request

retry of the payment

POST /orders/o1/pay
authorization: Bearer u1
409 Conflict
content-type: application/json

{
  "error": "not_payable",
  "status": "PAID"
}

GraphQL 4 requests

POST /graphql
content-type: application/json
authorization: Bearer u1

{
  "query": "mutation($lines: [OrderLine!]!) { placeOrder(lines: $lines) { id status } }",
  "variables": {
    "lines": [
      {
        "bookId": "b3",
        "qty": 1
      }
    ]
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "placeOrder": {
      "id": "o1",
      "status": "PLACED"
    }
  }
}
POST /graphql
content-type: application/json
authorization: Bearer u1

{
  "query": "mutation($id: ID!) { payOrder(id: $id) { id status } }",
  "variables": {
    "id": "o1"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "payOrder": {
      "id": "o1",
      "status": "PAID"
    }
  }
}
2 more requests

retry of the order: a second order

POST /graphql
content-type: application/json
authorization: Bearer u1

{
  "query": "mutation($lines: [OrderLine!]!) { placeOrder(lines: $lines) { id status } }",
  "variables": {
    "lines": [
      {
        "bookId": "b3",
        "qty": 1
      }
    ]
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "placeOrder": {
      "id": "o2",
      "status": "PLACED"
    }
  }
}

retry of the payment: a second charge

POST /graphql
content-type: application/json
authorization: Bearer u1

{
  "query": "mutation($id: ID!) { payOrder(id: $id) { id status } }",
  "variables": {
    "id": "o2"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "payOrder": {
      "id": "o2",
      "status": "PAID"
    }
  }
}

Rayfold 3 requests

POST /rayfold
content-type: application/rayfold+json
authorization: Bearer u1

{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "k-post-rayfold-000001",
... 15 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"ok":{"$type":"Order","id":"o1","status":"PLACED"},"patch":[{"set":"Order:o1","value":{"$type":"Order","id":"o1","status":"PLACED"}},{"set":"Book:b3","value":{"stock":99}}],"meta":{"cost":1},"fin":true}
{"id":2,"ok":{"$type":"Order","id":"o1","status":"PAID"},"patch":[{"set":"Order:o1","value":{"$type":"Order","id":"o1","status":"PAID"}}],"meta":{"cost":1},"fin":true}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "k-post-rayfold-000001",
      "shape": "{ id status }"
    },
    {
      "id": 2,
      "op": "payOrder",
      "args": {
        "id": {
          "$ref": "1.id"
        }
      },
      "key": "k-post-rayfold-000002",
      "shape": "{ id status }"
    }
  ]
}

retry after a lost response: both ops replay

POST /rayfold
content-type: application/rayfold+json
authorization: Bearer u1

{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "k-post-rayfold-000001",
... 15 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"ok":{"$type":"Order","id":"o1","status":"PLACED"},"patch":[{"set":"Order:o1","value":{"$type":"Order","id":"o1","status":"PLACED"}},{"set":"Book:b3","value":{"stock":99}}],"meta":{"cost":1,"replay":true},"fin":true}
{"id":2,"ok":{"$type":"Order","id":"o1","status":"PAID"},"patch":[{"set":"Order:o1","value":{"$type":"Order","id":"o1","status":"PAID"}}],"meta":{"cost":1,"replay":true},"fin":true}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "k-post-rayfold-000001",
      "shape": "{ id status }"
    },
    {
      "id": 2,
      "op": "payOrder",
      "args": {
        "id": {
          "$ref": "1.id"
        }
      },
      "key": "k-post-rayfold-000002",
      "shape": "{ id status }"
    }
  ]
}
1 more request

the same command through its HTTP binding

POST /orders
content-type: application/json
authorization: Bearer u1
idempotency-key: k-post-bind-00001

{
  "lines": [
    {
      "bookId": "b3",
      "qty": 1
    }
  ]
}
201 Created
cache-control: no-store
content-type: application/json; charset=utf-8
location: /orders/o2

{
  "$type": "Order",
  "id": "o2",
  "status": "PLACED",
  "total": "8.00",
  "items": [
    {
      "qty": 1,
      "unitPrice": "8.00",
      "book": {
        "$type": "Book",
        "id": "b3",
        "title": "Kindred"
      }
    }
  ]
... 1 more lines
Full response body
{
  "$type": "Order",
  "id": "o2",
  "status": "PLACED",
  "total": "8.00",
  "items": [
    {
      "qty": 1,
      "unitPrice": "8.00",
      "book": {
        "$type": "Book",
        "id": "b3",
        "title": "Kindred"
      }
    }
  ]
}
PUT

Replace

Rayfold ahead

Editor A replaces review r2. Editor B, still holding the previous version, replaces it too.

MeasuredRESTGraphQLRayfoldResult
lost updates when two editors race0 (If-Match, 412)1: no conditional write; B silently overwrote A0 (If-Match or ifVersion, VersionConflict)Level
requests for the stale editor to see the current version and retry3: 412, GET, PUTnever told2: the 412 already carries the current reviewRayfold ahead
See the real requests and responses (12)

REST 5 requests

GET /reviews/r2
authorization: Bearer u1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "9d3822e4de6c7c18"

{
  "id": "r2",
  "rating": 4,
  "body": "Dreamlike.",
  "bookId": "b2",
  "reviewerId": "u1"
}

editor A

PUT /reviews/r2
content-type: application/json
authorization: Bearer u1
if-match: "9d3822e4de6c7c18"

{
  "rating": 5,
  "body": "Reread it: better than I remembered."
}
200 OK
content-type: application/json
etag: "3e9263871a71359e"

{
  "id": "r2",
  "rating": 5,
  "body": "Reread it: better than I remembered.",
  "bookId": "b2",
  "reviewerId": "u1"
}
3 more requests

editor B, stale

PUT /reviews/r2
content-type: application/json
authorization: Bearer u1
if-match: "9d3822e4de6c7c18"

{
  "rating": 2,
  "body": "Too slow for me."
}
412 Precondition Failed
content-type: application/json

{
  "error": "precondition_failed"
}

editor B refetches

GET /reviews/r2
authorization: Bearer u1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "3e9263871a71359e"

{
  "id": "r2",
  "rating": 5,
  "body": "Reread it: better than I remembered.",
  "bookId": "b2",
  "reviewerId": "u1"
}

editor B retries

PUT /reviews/r2
content-type: application/json
authorization: Bearer u1
if-match: "3e9263871a71359e"

{
  "rating": 2,
  "body": "Too slow for me."
}
200 OK
content-type: application/json
etag: "3ed41806a81b686c"

{
  "id": "r2",
  "rating": 2,
  "body": "Too slow for me.",
  "bookId": "b2",
  "reviewerId": "u1"
}

GraphQL 2 requests

editor A

POST /graphql
content-type: application/json
authorization: Bearer u1

{
  "query": "mutation($id: ID!, $rating: Int!, $body: String!) { editReview(id: $id, rating: $rating, body: $body) { id rating body } }",
  "variables": {
    "id": "r2",
    "rating": 5,
    "body": "Reread it: better than I remembered."
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "editReview": {
      "id": "r2",
      "rating": 5,
      "body": "Reread it: better than I remembered."
    }
  }
}

editor B, stale: accepted, A's edit is gone

POST /graphql
content-type: application/json
authorization: Bearer u1

{
  "query": "mutation($id: ID!, $rating: Int!, $body: String!) { editReview(id: $id, rating: $rating, body: $body) { id rating body } }",
  "variables": {
    "id": "r2",
    "rating": 2,
    "body": "Too slow for me."
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "editReview": {
      "id": "r2",
      "rating": 2,
      "body": "Too slow for me."
    }
  }
}

Rayfold 5 requests

GET /reviews/r2
200 OK
cache-control: public, max-age=0, no-cache
content-type: application/json; charset=utf-8
etag: "sha256-be66b7fbdd1294fe60808971e00c6c65a41ea66423431a9e9797d06bed75ea76"

{
  "$type": "Review",
  "id": "r2",
  "rating": 4,
  "body": "Dreamlike.",
  "reviewerId": "u1",
  "version": 1
}

editor A

PUT /reviews/r2
content-type: application/json
authorization: Bearer u1
if-match: "1"

{
  "rating": 5,
  "body": "Reread it: better than I remembered."
}
200 OK
cache-control: no-store
content-type: application/json; charset=utf-8
etag: "2"

{
  "$type": "Review",
  "id": "r2",
  "rating": 5,
  "body": "Reread it: better than I remembered.",
  "reviewerId": "u1",
  "version": 2
}
3 more requests

editor B, stale: 412 carries the current review

PUT /reviews/r2
content-type: application/json
authorization: Bearer u1
if-match: "1"

{
  "rating": 2,
  "body": "Too slow for me."
}
412 Precondition Failed
cache-control: no-store
content-type: application/problem+json

{
  "type": "https://eddyboutros.github.io/rayfold/errors/VersionConflict",
  "title": "VersionConflict",
  "status": 412,
  "detail": "Review:r2 is at version 2, not 1",
  "code": "failed_precondition",
  "data": {
    "key": "Review:r2",
    "expected": 1,
    "actual": 2,
    "current": {
      "$type": "Review",
      "id": "r2",
      "rating": 5,
      "body": "Reread it: better than I remembered.",
      "reviewerId": "u1",
... 4 more lines
Full response body
{
  "type": "https://eddyboutros.github.io/rayfold/errors/VersionConflict",
  "title": "VersionConflict",
  "status": 412,
  "detail": "Review:r2 is at version 2, not 1",
  "code": "failed_precondition",
  "data": {
    "key": "Review:r2",
    "expected": 1,
    "actual": 2,
    "current": {
      "$type": "Review",
      "id": "r2",
      "rating": 5,
      "body": "Reread it: better than I remembered.",
      "reviewerId": "u1",
      "version": 2
    }
  }
}

editor B retries

PUT /reviews/r2
content-type: application/json
authorization: Bearer u1
if-match: "2"

{
  "rating": 2,
  "body": "Too slow for me."
}
200 OK
cache-control: no-store
content-type: application/json; charset=utf-8
etag: "3"

{
  "$type": "Review",
  "id": "r2",
  "rating": 2,
  "body": "Too slow for me.",
  "reviewerId": "u1",
  "version": 3
}

the same stale edit as a native batch op

POST /rayfold
content-type: application/rayfold+json
authorization: Bearer u1

{
  "ops": [
    {
      "id": 1,
      "op": "editReview",
      "args": {
        "id": "r2",
        "input": {
          "rating": 5,
          "body": "Reread it: better than I remembered."
        }
      },
      "key": "k-put-native-0001",
      "ifVersion": 1
    }
  ]
... 1 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "error": {
    "code": "failed_precondition",
    "message": "Review:r2 is at version 3, not 1",
    "type": "VersionConflict",
    "data": {
      "key": "Review:r2",
      "expected": 1,
      "actual": 3,
      "current": {
        "$type": "Review",
        "id": "r2",
        "rating": 2,
        "body": "Too slow for me.",
        "reviewerId": "u1",
... 6 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "editReview",
      "args": {
        "id": "r2",
        "input": {
          "rating": 5,
          "body": "Reread it: better than I remembered."
        }
      },
      "key": "k-put-native-0001",
      "ifVersion": 1
    }
  ]
}
Full response body
{
  "id": 1,
  "error": {
    "code": "failed_precondition",
    "message": "Review:r2 is at version 3, not 1",
    "type": "VersionConflict",
    "data": {
      "key": "Review:r2",
      "expected": 1,
      "actual": 3,
      "current": {
        "$type": "Review",
        "id": "r2",
        "rating": 2,
        "body": "Too slow for me.",
        "reviewerId": "u1",
        "version": 3
      }
    }
  },
  "fin": true
}
PATCH

Partial update

Rayfold ahead

An admin changes the price of Beloved (b5). The admin's client already shows the catalogue and the product page; another user has the product page open.

MeasuredRESTGraphQLRayfoldResult
fields not sent are left untouchedyes (merge patch)yes (absent input fields)yes (absent stays absent; explicit null clears)Level
open views correct without a refetch (catalogue + product page)1 of 2: the PATCH response replaces the page; the list is stale2 of 2: the normalized cache merges the returned book2 of 2: the patch updates every cached viewLevel
another user's open view updates by itselfno: no event exists for price (the stream carries stock only)no: no subscription covers priceyes: a live query needs no event codeRayfold ahead
validation rule and published contract come from one sourceno: hand-written check; OpenAPI maintained separatelyno: SDL has no constraint syntax; the check lives in the resolveryes: @range(min: 0) is enforced and appears in the generated OpenAPIRayfold ahead
See the real requests and responses (7)

REST 2 requests

PATCH /books/b5
content-type: application/merge-patch+json
authorization: Bearer admin

{
  "price": "10.75"
}
200 OK
content-type: application/json

{
  "id": "b5",
  "title": "Beloved",
  "format": "PAPERBACK",
  "price": "10.75",
  "stock": 14,
  "authorId": "a4",
  "ownerId": "u1",
  "costPrice": "4.28"
}

negative price: rejected by a hand-written check

PATCH /books/b5
content-type: application/merge-patch+json
authorization: Bearer admin

{
  "price": "-1.00"
}
400 Bad Request
content-type: application/json

{
  "error": "invalid",
  "field": "price"
}

GraphQL 2 requests

POST /graphql
content-type: application/json
authorization: Bearer admin

{
  "query": "mutation { updateBook(id: \"b5\", patch: { price: \"10.75\" }) { __typename id price } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "updateBook": {
      "__typename": "Book",
      "id": "b5",
      "price": "10.75"
    }
  }
}

negative price: rejected by a hand-written check

POST /graphql
content-type: application/json
authorization: Bearer admin

{
  "query": "mutation { updateBook(id: \"b5\", patch: { price: \"-1.00\" }) { id } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "errors": [
    {
      "message": "price must be >= 0",
      "locations": [
        {
          "line": 1,
          "column": 12
        }
      ],
      "path": [
        "updateBook"
      ],
      "extensions": {
        "code": "BAD_USER_INPUT"
      }
... 4 more lines
Full response body
{
  "errors": [
    {
      "message": "price must be >= 0",
      "locations": [
        {
          "line": 1,
          "column": 12
        }
      ],
      "path": [
        "updateBook"
      ],
      "extensions": {
        "code": "BAD_USER_INPUT"
      }
    }
  ],
  "data": null
}

Rayfold 3 requests

Rayfold client: the command (native batch)

POST /rayfold
content-type: application/rayfold+json
authorization: Bearer admin

{
  "rayfold": "0.1",
  "ops": [
    {
      "id": 1,
      "op": "updateBook",
      "args": {
        "id": "b5",
        "patch": {
          "price": "10.75"
        }
      },
      "shape": "{ id price }",
      "key": "d3252dfad3c8424fad6cd6122cbb9019"
    }
  ]
... 1 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "$type": "Book",
    "id": "b5",
    "price": "10.75"
  },
  "patch": [
    {
      "set": "Book:b5",
      "value": {
        "$type": "Book",
        "id": "b5",
        "price": "10.75"
      }
    }
... 6 more lines
Full request body
{
  "rayfold": "0.1",
  "ops": [
    {
      "id": 1,
      "op": "updateBook",
      "args": {
        "id": "b5",
        "patch": {
          "price": "10.75"
        }
      },
      "shape": "{ id price }",
      "key": "d3252dfad3c8424fad6cd6122cbb9019"
    }
  ]
}
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Book",
    "id": "b5",
    "price": "10.75"
  },
  "patch": [
    {
      "set": "Book:b5",
      "value": {
        "$type": "Book",
        "id": "b5",
        "price": "10.75"
      }
    }
  ],
  "meta": {
    "cost": 1
  },
  "fin": true
}

HTTP binding: only stock is sent

PATCH /books/b5
content-type: application/merge-patch+json
authorization: Bearer admin

{
  "stock": 12
}
200 OK
cache-control: no-store
content-type: application/json; charset=utf-8

{
  "$type": "Book",
  "id": "b5",
  "title": "Beloved",
  "format": "PAPERBACK",
  "price": "10.75",
  "stock": 12,
  "author": {
    "$type": "Author",
    "id": "a4",
    "name": "Toni Morrison"
  }
}
1 more request

negative price: rejected by @range(min: 0) from the schema

PATCH /books/b5
content-type: application/merge-patch+json
authorization: Bearer admin

{
  "price": "-1.00"
}
400 Bad Request
cache-control: no-store
content-type: application/problem+json

{
  "type": "https://eddyboutros.github.io/rayfold/errors/invalid_argument",
  "title": "invalid argument",
  "status": 400,
  "detail": "updateBook().patch.price: must be >= 0",
  "code": "invalid_argument"
}
DELETE

Delete

Rayfold ahead

The author deletes review r2 while the book page (which lists it) is cached. Then the client retries, as it does when a response is lost.

MeasuredRESTGraphQLRayfoldResult
cached views still showing the deleted review1: the cached list keeps it until a refetch1: a normalized cache does not remove deleted entities from lists by itself0: the command's { "del": "Review:r2" } patch removes it everywhereRayfold ahead
a retry after a lost response reports the original successno: 404, indistinguishable from a wrong idno: NOT_FOUND erroryes: the idempotency key replays the first resultRayfold ahead
See the real requests and responses (9)

REST 3 requests

GET /reviews?bookId=b2
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c77ecf24379cb1ca"

{
  "items": [
    {
      "id": "r2",
      "rating": 4,
      "body": "Dreamlike.",
      "bookId": "b2",
      "reviewerId": "u1",
      "version": 1
    }
  ]
}
DELETE /reviews/r2
authorization: Bearer u1
204 No Content
1 more request

retry after a lost response

DELETE /reviews/r2
authorization: Bearer u1
404 Not Found
content-type: application/json

{
  "error": "not_found"
}

GraphQL 2 requests

POST /graphql
content-type: application/json
authorization: Bearer u1

{
  "query": "mutation { deleteReview(id: \"r2\") }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "deleteReview": "r2"
  }
}

retry after a lost response

POST /graphql
content-type: application/json
authorization: Bearer u1

{
  "query": "mutation { deleteReview(id: \"r2\") }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "errors": [
    {
      "message": "Review not found",
      "locations": [
        {
          "line": 1,
          "column": 12
        }
      ],
      "path": [
        "deleteReview"
      ],
      "extensions": {
        "code": "NOT_FOUND"
      }
... 4 more lines
Full response body
{
  "errors": [
    {
      "message": "Review not found",
      "locations": [
        {
          "line": 1,
          "column": 12
        }
      ],
      "path": [
        "deleteReview"
      ],
      "extensions": {
        "code": "NOT_FOUND"
      }
    }
  ],
  "data": null
}

Rayfold 4 requests

Rayfold client (native batch)

POST /rayfold
content-type: application/rayfold+json
authorization: Bearer u1

{
  "rayfold": "0.1",
  "ops": [
    {
      "id": 1,
      "op": "deleteReview",
      "args": {
        "id": "r2"
      },
      "shape": "{ id }",
      "key": "k-del-rayfold-0000001"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "$type": "Review",
    "id": "r2"
  },
  "patch": [
    {
      "set": "Review:r2",
      "value": {
        "$type": "Review",
        "id": "r2"
      }
    },
    {
      "del": "Review:r2"
... 7 more lines
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Review",
    "id": "r2"
  },
  "patch": [
    {
      "set": "Review:r2",
      "value": {
        "$type": "Review",
        "id": "r2"
      }
    },
    {
      "del": "Review:r2"
    }
  ],
  "meta": {
    "cost": 1
  },
  "fin": true
}

retry after a lost response: replayed

POST /rayfold
content-type: application/rayfold+json
authorization: Bearer u1

{
  "rayfold": "0.1",
  "ops": [
    {
      "id": 1,
      "op": "deleteReview",
      "args": {
        "id": "r2"
      },
      "shape": "{ id }",
      "key": "k-del-rayfold-0000001"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "$type": "Review",
    "id": "r2"
  },
  "patch": [
    {
      "set": "Review:r2",
      "value": {
        "$type": "Review",
        "id": "r2"
      }
    },
    {
      "del": "Review:r2"
... 8 more lines
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Review",
    "id": "r2"
  },
  "patch": [
    {
      "set": "Review:r2",
      "value": {
        "$type": "Review",
        "id": "r2"
      }
    },
    {
      "del": "Review:r2"
    }
  ],
  "meta": {
    "cost": 1,
    "replay": true
  },
  "fin": true
}
2 more requests

HTTP binding

DELETE /reviews/r1
authorization: Bearer admin
idempotency-key: k-del-bind-000001
200 OK
cache-control: no-store
content-type: application/json; charset=utf-8
etag: "1"

{
  "$type": "Review",
  "id": "r1",
  "rating": 5,
  "body": "Ambiguous utopia, unambiguous masterpiece.",
  "reviewerId": "u2",
  "version": 1
}

HTTP binding: the retry replays

DELETE /reviews/r1
authorization: Bearer admin
idempotency-key: k-del-bind-000001
200 OK
cache-control: no-store
content-type: application/json; charset=utf-8
etag: "1"
idempotent-replayed: true

{
  "$type": "Review",
  "id": "r1",
  "rating": 5,
  "body": "Ambiguous utopia, unambiguous masterpiece.",
  "reviewerId": "u2",
  "version": 1
}
QUERY

Safe query with a body

Rayfold ahead

Search paperbacks up to $10 and show each author's name, then run the same search again through a shared cache (RFC 10008).

MeasuredRESTGraphQLRayfoldResult
QUERY method supportedyes (RFC 10008, implemented here)no: 405; fall back to POST or a long GETyes: any read-only batch, and query bindingsLevel
requests for results with author names10: results, then one per author1 (POST)1Level
bytes on the repeat search through a shared cache (bytes, headers + body)10 revalidations (304), 1620 Bthe full response again (POST), 1260 B1 revalidation (304), 344 BRayfold ahead
See the real requests and responses (14)

REST 10 requests

QUERY /books
content-type: application/json

{
  "filter": {
    "format": "PAPERBACK",
    "maxPrice": "10.00"
  },
  "limit": 20
}
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "44470c982c079b30"

{
  "items": [
    {
      "id": "b11",
      "title": "The Remains of the Day",
      "format": "PAPERBACK",
      "price": "8.99",
      "stock": 12,
      "authorId": "a7",
      "ownerId": "u1"
    },
    {
      "id": "b14",
      "title": "Ficciones",
      "format": "PAPERBACK",
      "price": "9.00",
... 88 more lines
Full response body
{
  "items": [
    {
      "id": "b11",
      "title": "The Remains of the Day",
      "format": "PAPERBACK",
      "price": "8.99",
      "stock": 12,
      "authorId": "a7",
      "ownerId": "u1"
    },
    {
      "id": "b14",
      "title": "Ficciones",
      "format": "PAPERBACK",
      "price": "9.00",
      "stock": 5,
      "authorId": "a8",
      "ownerId": "u1"
    },
    {
      "id": "b16",
      "title": "Mrs Dalloway",
      "format": "PAPERBACK",
      "price": "7.50",
      "stock": 18,
      "authorId": "a9",
      "ownerId": "u1"
    },
    {
      "id": "b21",
      "title": "The Fifth Season",
      "format": "PAPERBACK",
      "price": "9.99",
      "stock": 16,
      "authorId": "a11",
      "ownerId": "u1"
    },
    {
      "id": "b22",
      "title": "The Obelisk Gate",
      "format": "PAPERBACK",
      "price": "9.99",
      "stock": 10,
      "authorId": "a11",
      "ownerId": "u2"
    },
    {
      "id": "b30",
      "title": "Parable of the Sower",
      "format": "PAPERBACK",
      "price": "9.25",
      "stock": 15,
      "authorId": "a3",
      "ownerId": "u2"
    },
    {
      "id": "b31",
      "title": "Dawn",
      "format": "PAPERBACK",
      "price": "8.50",
      "stock": 7,
      "authorId": "a3",
      "ownerId": "u1"
    },
    {
      "id": "b33",
      "title": "Chronicle of a Death Foretold",
      "format": "PAPERBACK",
      "price": "8.00",
      "stock": 6,
      "authorId": "a5",
      "ownerId": "u1"
    },
    {
      "id": "b4",
      "title": "A Wizard of Earthsea",
      "format": "PAPERBACK",
      "price": "9.99",
      "stock": 0,
      "authorId": "a1",
      "ownerId": "u1"
    },
    {
      "id": "b5",
      "title": "Beloved",
      "format": "PAPERBACK",
      "price": "9.50",
      "stock": 14,
      "authorId": "a4",
      "ownerId": "u1"
    },
    {
      "id": "b9",
      "title": "Half of a Yellow Sun",
      "format": "PAPERBACK",
      "price": "10.00",
      "stock": 9,
      "authorId": "a6",
      "ownerId": "u1"
    }
  ],
  "total": 11
}
GET /authors/a7
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "dca8d7b031d9dd19"

{
  "id": "a7",
  "name": "Kazuo Ishiguro",
  "bio": "Nobel laureate in Literature, 2017."
}
8 more requests
GET /authors/a8
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "74f6e8c2a1886d1b"

{
  "id": "a8",
  "name": "Jorge Luis Borges",
  "bio": "Argentine writer of short stories, essays and poems."
}
GET /authors/a9
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "b4e4cfde092a1b5e"

{
  "id": "a9",
  "name": "Virginia Woolf",
  "bio": "English modernist novelist and essayist."
}
GET /authors/a11
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "6684c9a6cb4f0824"

{
  "id": "a11",
  "name": "N. K. Jemisin",
  "bio": "Won the Hugo Award for Best Novel three years running for the Broken Earth trilogy."
}
GET /authors/a3
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c7167b1ef1cce231"

{
  "id": "a3",
  "name": "Octavia E. Butler",
  "bio": "Science fiction author from Pasadena."
}
GET /authors/a5
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "ca0a151f549166c1"

{
  "id": "a5",
  "name": "Gabriel García Márquez",
  "bio": "Nobel laureate in Literature, 1982."
}
GET /authors/a1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "28bbc6e5edb7fc7e"

{
  "id": "a1",
  "name": "Ursula K. Le Guin",
  "bio": "American author of speculative fiction."
}
GET /authors/a4
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "bb4fa4da37e09e5c"

{
  "id": "a4",
  "name": "Toni Morrison",
  "bio": "Nobel laureate in Literature, 1993."
}
GET /authors/a6
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "de6a871eb8730c2d"

{
  "id": "a6",
  "name": "Chimamanda Ngozi Adichie",
  "bio": "Nigerian novelist and essayist."
}

GraphQL 2 requests

QUERY /graphql
content-type: application/json

{
  "query": "{ books(first: 20, format: \"PAPERBACK\", maxPrice: \"10.00\") { items { id title price author { name } } total } }"
}
405 Method Not Allowed
allow: GET, POST
content-type: application/json

{
  "errors": [
    {
      "message": "QUERY is not part of GraphQL over HTTP; use GET or POST"
    }
  ]
}

fallback: POST, which shared caches cannot store

POST /graphql
content-type: application/json

{
  "query": "{ books(first: 20, format: \"PAPERBACK\", maxPrice: \"10.00\") { items { id title price author { name } } total } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "b11",
          "title": "The Remains of the Day",
          "price": "8.99",
          "author": {
            "name": "Kazuo Ishiguro"
          }
        },
        {
          "id": "b14",
          "title": "Ficciones",
          "price": "9.00",
... 81 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "b11",
          "title": "The Remains of the Day",
          "price": "8.99",
          "author": {
            "name": "Kazuo Ishiguro"
          }
        },
        {
          "id": "b14",
          "title": "Ficciones",
          "price": "9.00",
          "author": {
            "name": "Jorge Luis Borges"
          }
        },
        {
          "id": "b16",
          "title": "Mrs Dalloway",
          "price": "7.50",
          "author": {
            "name": "Virginia Woolf"
          }
        },
        {
          "id": "b21",
          "title": "The Fifth Season",
          "price": "9.99",
          "author": {
            "name": "N. K. Jemisin"
          }
        },
        {
          "id": "b22",
          "title": "The Obelisk Gate",
          "price": "9.99",
          "author": {
            "name": "N. K. Jemisin"
          }
        },
        {
          "id": "b30",
          "title": "Parable of the Sower",
          "price": "9.25",
          "author": {
            "name": "Octavia E. Butler"
          }
        },
        {
          "id": "b31",
          "title": "Dawn",
          "price": "8.50",
          "author": {
            "name": "Octavia E. Butler"
          }
        },
        {
          "id": "b33",
          "title": "Chronicle of a Death Foretold",
          "price": "8.00",
          "author": {
            "name": "Gabriel García Márquez"
          }
        },
        {
          "id": "b4",
          "title": "A Wizard of Earthsea",
          "price": "9.99",
          "author": {
            "name": "Ursula K. Le Guin"
          }
        },
        {
          "id": "b5",
          "title": "Beloved",
          "price": "9.50",
          "author": {
            "name": "Toni Morrison"
          }
        },
        {
          "id": "b9",
          "title": "Half of a Yellow Sun",
          "price": "10.00",
          "author": {
            "name": "Chimamanda Ngozi Adichie"
          }
        }
      ],
      "total": 11
    }
  }
}

Rayfold 2 requests

QUERY /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "format": "PAPERBACK",
          "maxPrice": "10.00"
        },
        "page": {
          "first": 20
        }
      },
      "shape": "{ items { id title price author { name } } total }"
    }
... 2 more lines
200 OK
cache-control: public, max-age=60
content-type: application/rayfold-frames+json
etag: "sha256-333c30cf42c67f6f663e6e885312103612b5d53bd4a2a835861a6725e2112fb1"

{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Book",
        "id": "b11",
        "title": "The Remains of the Day",
        "price": "8.99",
        "author": {
          "$type": "Author",
          "name": "Kazuo Ishiguro"
        }
      },
      {
        "$type": "Book",
... 106 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "format": "PAPERBACK",
          "maxPrice": "10.00"
        },
        "page": {
          "first": 20
        }
      },
      "shape": "{ items { id title price author { name } } total }"
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Book",
        "id": "b11",
        "title": "The Remains of the Day",
        "price": "8.99",
        "author": {
          "$type": "Author",
          "name": "Kazuo Ishiguro"
        }
      },
      {
        "$type": "Book",
        "id": "b14",
        "title": "Ficciones",
        "price": "9.00",
        "author": {
          "$type": "Author",
          "name": "Jorge Luis Borges"
        }
      },
      {
        "$type": "Book",
        "id": "b16",
        "title": "Mrs Dalloway",
        "price": "7.50",
        "author": {
          "$type": "Author",
          "name": "Virginia Woolf"
        }
      },
      {
        "$type": "Book",
        "id": "b21",
        "title": "The Fifth Season",
        "price": "9.99",
        "author": {
          "$type": "Author",
          "name": "N. K. Jemisin"
        }
      },
      {
        "$type": "Book",
        "id": "b22",
        "title": "The Obelisk Gate",
        "price": "9.99",
        "author": {
          "$type": "Author",
          "name": "N. K. Jemisin"
        }
      },
      {
        "$type": "Book",
        "id": "b30",
        "title": "Parable of the Sower",
        "price": "9.25",
        "author": {
          "$type": "Author",
          "name": "Octavia E. Butler"
        }
      },
      {
        "$type": "Book",
        "id": "b31",
        "title": "Dawn",
        "price": "8.50",
        "author": {
          "$type": "Author",
          "name": "Octavia E. Butler"
        }
      },
      {
        "$type": "Book",
        "id": "b33",
        "title": "Chronicle of a Death Foretold",
        "price": "8.00",
        "author": {
          "$type": "Author",
          "name": "Gabriel García Márquez"
        }
      },
      {
        "$type": "Book",
        "id": "b4",
        "title": "A Wizard of Earthsea",
        "price": "9.99",
        "author": {
          "$type": "Author",
          "name": "Ursula K. Le Guin"
        }
      },
      {
        "$type": "Book",
        "id": "b5",
        "title": "Beloved",
        "price": "9.50",
        "author": {
          "$type": "Author",
          "name": "Toni Morrison"
        }
      },
      {
        "$type": "Book",
        "id": "b9",
        "title": "Half of a Yellow Sun",
        "price": "10.00",
        "author": {
          "$type": "Author",
          "name": "Chimamanda Ngozi Adichie"
        }
      }
    ],
    "total": 11
  },
  "meta": {
    "cost": 46
  },
  "fin": true
}

the same query through its HTTP binding

QUERY /books
content-type: application/json

{
  "filter": {
    "format": "PAPERBACK",
    "maxPrice": "10.00"
  }
}
200 OK
cache-control: public, max-age=60
content-type: application/json; charset=utf-8
etag: "sha256-8365e34a1fdb6fcf9b06b67e800a8dfa3de7a7066974a18b39141a5329cb80cc"

{
  "items": [
    {
      "$type": "Book",
      "id": "b11",
      "title": "The Remains of the Day",
      "format": "PAPERBACK",
      "price": "8.99",
      "stock": 12,
      "author": {
        "$type": "Author",
        "id": "a7",
        "name": "Kazuo Ishiguro"
      }
    },
    {
... 134 more lines
Full response body
{
  "items": [
    {
      "$type": "Book",
      "id": "b11",
      "title": "The Remains of the Day",
      "format": "PAPERBACK",
      "price": "8.99",
      "stock": 12,
      "author": {
        "$type": "Author",
        "id": "a7",
        "name": "Kazuo Ishiguro"
      }
    },
    {
      "$type": "Book",
      "id": "b14",
      "title": "Ficciones",
      "format": "PAPERBACK",
      "price": "9.00",
      "stock": 5,
      "author": {
        "$type": "Author",
        "id": "a8",
        "name": "Jorge Luis Borges"
      }
    },
    {
      "$type": "Book",
      "id": "b16",
      "title": "Mrs Dalloway",
      "format": "PAPERBACK",
      "price": "7.50",
      "stock": 18,
      "author": {
        "$type": "Author",
        "id": "a9",
        "name": "Virginia Woolf"
      }
    },
    {
      "$type": "Book",
      "id": "b21",
      "title": "The Fifth Season",
      "format": "PAPERBACK",
      "price": "9.99",
      "stock": 16,
      "author": {
        "$type": "Author",
        "id": "a11",
        "name": "N. K. Jemisin"
      }
    },
    {
      "$type": "Book",
      "id": "b22",
      "title": "The Obelisk Gate",
      "format": "PAPERBACK",
      "price": "9.99",
      "stock": 10,
      "author": {
        "$type": "Author",
        "id": "a11",
        "name": "N. K. Jemisin"
      }
    },
    {
      "$type": "Book",
      "id": "b30",
      "title": "Parable of the Sower",
      "format": "PAPERBACK",
      "price": "9.25",
      "stock": 15,
      "author": {
        "$type": "Author",
        "id": "a3",
        "name": "Octavia E. Butler"
      }
    },
    {
      "$type": "Book",
      "id": "b31",
      "title": "Dawn",
      "format": "PAPERBACK",
      "price": "8.50",
      "stock": 7,
      "author": {
        "$type": "Author",
        "id": "a3",
        "name": "Octavia E. Butler"
      }
    },
    {
      "$type": "Book",
      "id": "b33",
      "title": "Chronicle of a Death Foretold",
      "format": "PAPERBACK",
      "price": "8.00",
      "stock": 6,
      "author": {
        "$type": "Author",
        "id": "a5",
        "name": "Gabriel García Márquez"
      }
    },
    {
      "$type": "Book",
      "id": "b4",
      "title": "A Wizard of Earthsea",
      "format": "PAPERBACK",
      "price": "9.99",
      "stock": 0,
      "author": {
        "$type": "Author",
        "id": "a1",
        "name": "Ursula K. Le Guin"
      }
    },
    {
      "$type": "Book",
      "id": "b5",
      "title": "Beloved",
      "format": "PAPERBACK",
      "price": "9.50",
      "stock": 14,
      "author": {
        "$type": "Author",
        "id": "a4",
        "name": "Toni Morrison"
      }
    },
    {
      "$type": "Book",
      "id": "b9",
      "title": "Half of a Yellow Sun",
      "format": "PAPERBACK",
      "price": "10.00",
      "stock": 9,
      "author": {
        "$type": "Author",
        "id": "a6",
        "name": "Chimamanda Ngozi Adichie"
      }
    }
  ],
  "cursor": "b9",
  "hasMore": false,
  "total": 11
}
Real data

78,086 real books, the same answers from every API

The same three servers, loaded with the full Project Gutenberg catalogue (78,086 books by 26,263 authors, retrieved 2026-09-10). Every answer below was checked against the catalogue itself, not against any of the servers, and all three had to agree.

What is real and what is the store's own

Real, from the catalogue: every title, author name and author life dates (served as the author's bio), and the ids: book g<Text#> is Project Gutenberg's own ebook number, author ga<index> its position in the converted file. The catalogue's languages and release dates are in the file but not served by this bookstore. The store's own: price 0.00, format EBOOK, stock 1,000,000 and owner "gutenberg" on every catalogue book (the catalogue has no prices or stock; Project Gutenberg ebooks are free), no reviews, and the seed fixture's 4 books by 3 authors (b1-b4, a1-a3), which every stack serves alongside the catalogue.

Title search on the real catalogue

Rayfold ahead

Measured: requests and bytes for two searches (bytes on the wire (request + response), lower is better)

RESTREST: 4,526 bytes on the wire (request + response)4,526GraphQLGraphQL: 2,356 bytes on the wire (request + response)2,356RayfoldRayfold: 1,853 bytes on the wire (request + response)1,853
REST
2 requests (GET with query parameters, then QUERY with a body), 4526 B
GraphQL
1 request (two aliased fields), 2356 B
Rayfold
1 request (a batch of two ops), 1853 B

"frankenstein": the catalogue's 6 editions (three English, three French volumes), all of them; "love": total 556, first 20 by id. Ids, titles and totals match the catalogue file on every stack. Rayfold is measured as its client sends when it has the schema: compact frames in its binary encoding (RB). The identical ops as JSON took 2501 B, with the identical data

See the real requests and responses (5)

REST 2 requests

GET /books?titleContains=frankenstein&limit=50
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "fadaf9be5ddc9196"

{
  "items": [
    {
      "id": "g41445",
      "title": "Frankenstein; Or, The Modern Prometheus",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga51",
      "ownerId": "gutenberg"
    },
    {
      "id": "g42324",
      "title": "Frankenstein; Or, The Modern Prometheus",
      "format": "EBOOK",
      "price": "0.00",
... 45 more lines
Full response body
{
  "items": [
    {
      "id": "g41445",
      "title": "Frankenstein; Or, The Modern Prometheus",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga51",
      "ownerId": "gutenberg"
    },
    {
      "id": "g42324",
      "title": "Frankenstein; Or, The Modern Prometheus",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga51",
      "ownerId": "gutenberg"
    },
    {
      "id": "g62404",
      "title": "Frankenstein, ou le Prométhée moderne Volume 1 (of 3)",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga51",
      "ownerId": "gutenberg"
    },
    {
      "id": "g62405",
      "title": "Frankenstein, ou le Prométhée moderne Volume 2 (of 3)",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga51",
      "ownerId": "gutenberg"
    },
    {
      "id": "g62406",
      "title": "Frankenstein, ou le Prométhée moderne Volume 3 (of 3)",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga51",
      "ownerId": "gutenberg"
    },
    {
      "id": "g84",
      "title": "Frankenstein; or, the modern prometheus",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga51",
      "ownerId": "gutenberg"
    }
  ],
  "total": 6,
  "hasMore": false,
  "cursor": "g84"
}
QUERY /books
content-type: application/json

{
  "filter": {
    "titleContains": "love"
  },
  "limit": 20
}
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "e480a2e8171f5ebc"

{
  "items": [
    {
      "id": "g10102",
      "title": "The Czar's Spy: The Mystery of a Silent Love",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga1307",
      "ownerId": "gutenberg"
    },
    {
      "id": "g10342",
      "title": "The Velvet Glove",
      "format": "EBOOK",
      "price": "0.00",
... 171 more lines
Full response body
{
  "items": [
    {
      "id": "g10102",
      "title": "The Czar's Spy: The Mystery of a Silent Love",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga1307",
      "ownerId": "gutenberg"
    },
    {
      "id": "g10342",
      "title": "The Velvet Glove",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga1108",
      "ownerId": "gutenberg"
    },
    {
      "id": "g10379",
      "title": "At love's cost",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga2725",
      "ownerId": "gutenberg"
    },
    {
      "id": "g10417",
      "title": "Love, Life & Work: Being a Book of Opinions Reasonably Good-Natured Concerning How to Attain the Highest Happiness for One's Self with the Least Possible Harm to Others",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga203",
      "ownerId": "gutenberg"
    },
    {
      "id": "g10671",
      "title": "The Botanic Garden. Part 2, Containing the Loves of the Plants. A Poem.: With Philosophical Notes.",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga2524",
      "ownerId": "gutenberg"
    },
    {
      "id": "g10850",
      "title": "Philaster; Or, Love Lies a Bleeding",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga2801",
      "ownerId": "gutenberg"
    },
    {
      "id": "g10957",
      "title": "The Love Affairs of Great Musicians, Volume 1",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga1971",
      "ownerId": "gutenberg"
    },
    {
      "id": "g1109",
      "title": "Love's Labour's Lost",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga56",
      "ownerId": "gutenberg"
    },
    {
      "id": "g11107",
      "title": "Theobald, the Iron-Hearted; Or, Love to Enemies",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga2999",
      "ownerId": "gutenberg"
    },
    {
      "id": "g11213",
      "title": "Brotherly Love: Shewing That as Merely Human It May Not Always Be Depended Upon",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga3034",
      "ownerId": "gutenberg"
    },
    {
      "id": "g11248",
      "title": "The Delights of Wisdom Pertaining to Conjugial Love: To Which is Added The Pleasures of Insanity Pertaining To Scortatory Love",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga3044",
      "ownerId": "gutenberg"
    },
    {
      "id": "g11360",
      "title": "Sacred and Profane Love: A Novel in Three Episodes",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga742",
      "ownerId": "gutenberg"
    },
    {
      "id": "g11365",
      "title": "The Fern Lover's Companion: A Guide for the Northeastern States and Canada",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga3086",
      "ownerId": "gutenberg"
    },
    {
      "id": "g1137",
      "title": "A Lover's Complaint",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga56",
      "ownerId": "gutenberg"
    },
    {
      "id": "g11377",
      "title": "The Man Whom the Trees Loved",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga1159",
      "ownerId": "gutenberg"
    },
    {
      "id": "g11419",
      "title": "The Love Affairs of Great Musicians, Volume 2",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga1971",
      "ownerId": "gutenberg"
    },
    {
      "id": "g11640",
      "title": "Love and Mr. Lewisham",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga24",
      "ownerId": "gutenberg"
    },
    {
      "id": "g11924",
      "title": "The Loves of Krishna in Indian Painting and Poetry",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga3227",
      "ownerId": "gutenberg"
    },
    {
      "id": "g11934",
      "title": "Primitive Love and Love-Stories",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga3232",
      "ownerId": "gutenberg"
    },
    {
      "id": "g12015",
      "title": "Love under Fire",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga1870",
      "ownerId": "gutenberg"
    }
  ],
  "total": 556,
  "hasMore": true,
  "cursor": "g12015"
}

GraphQL 1 request

POST /graphql
content-type: application/json

{
  "query": "{ f: books(titleContains: \"frankenstein\", first: 50) { items { id title } total hasMore cursor } l: books(titleContains: \"love\", first: 20) { items { id title } total hasMore cursor } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "f": {
      "items": [
        {
          "id": "g41445",
          "title": "Frankenstein; Or, The Modern Prometheus"
        },
        {
          "id": "g42324",
          "title": "Frankenstein; Or, The Modern Prometheus"
        },
        {
          "id": "g62404",
          "title": "Frankenstein, ou le Prométhée moderne Volume 1 (of 3)"
        },
... 106 more lines
Full response body
{
  "data": {
    "f": {
      "items": [
        {
          "id": "g41445",
          "title": "Frankenstein; Or, The Modern Prometheus"
        },
        {
          "id": "g42324",
          "title": "Frankenstein; Or, The Modern Prometheus"
        },
        {
          "id": "g62404",
          "title": "Frankenstein, ou le Prométhée moderne Volume 1 (of 3)"
        },
        {
          "id": "g62405",
          "title": "Frankenstein, ou le Prométhée moderne Volume 2 (of 3)"
        },
        {
          "id": "g62406",
          "title": "Frankenstein, ou le Prométhée moderne Volume 3 (of 3)"
        },
        {
          "id": "g84",
          "title": "Frankenstein; or, the modern prometheus"
        }
      ],
      "total": 6,
      "hasMore": false,
      "cursor": "g84"
    },
    "l": {
      "items": [
        {
          "id": "g10102",
          "title": "The Czar's Spy: The Mystery of a Silent Love"
        },
        {
          "id": "g10342",
          "title": "The Velvet Glove"
        },
        {
          "id": "g10379",
          "title": "At love's cost"
        },
        {
          "id": "g10417",
          "title": "Love, Life & Work: Being a Book of Opinions Reasonably Good-Natured Concerning How to Attain the Highest Happiness for One's Self with the Least Possible Harm to Others"
        },
        {
          "id": "g10671",
          "title": "The Botanic Garden. Part 2, Containing the Loves of the Plants. A Poem.: With Philosophical Notes."
        },
        {
          "id": "g10850",
          "title": "Philaster; Or, Love Lies a Bleeding"
        },
        {
          "id": "g10957",
          "title": "The Love Affairs of Great Musicians, Volume 1"
        },
        {
          "id": "g1109",
          "title": "Love's Labour's Lost"
        },
        {
          "id": "g11107",
          "title": "Theobald, the Iron-Hearted; Or, Love to Enemies"
        },
        {
          "id": "g11213",
          "title": "Brotherly Love: Shewing That as Merely Human It May Not Always Be Depended Upon"
        },
        {
          "id": "g11248",
          "title": "The Delights of Wisdom Pertaining to Conjugial Love: To Which is Added The Pleasures of Insanity Pertaining To Scortatory Love"
        },
        {
          "id": "g11360",
          "title": "Sacred and Profane Love: A Novel in Three Episodes"
        },
        {
          "id": "g11365",
          "title": "The Fern Lover's Companion: A Guide for the Northeastern States and Canada"
        },
        {
          "id": "g1137",
          "title": "A Lover's Complaint"
        },
        {
          "id": "g11377",
          "title": "The Man Whom the Trees Loved"
        },
        {
          "id": "g11419",
          "title": "The Love Affairs of Great Musicians, Volume 2"
        },
        {
          "id": "g11640",
          "title": "Love and Mr. Lewisham"
        },
        {
          "id": "g11924",
          "title": "The Loves of Krishna in Indian Painting and Poetry"
        },
        {
          "id": "g11934",
          "title": "Primitive Love and Love-Stories"
        },
        {
          "id": "g12015",
          "title": "Love under Fire"
        }
      ],
      "total": 556,
      "hasMore": true,
      "cursor": "g12015"
    }
  }
}

Rayfold 2 requests

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "titleContains": "frankenstein"
        },
        "page": {
          "first": 50
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
... 16 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"items":[{"id":"g41445","title":"Frankenstein; Or, The Modern Prometheus"},{"id":"g42324","title":"Frankenstein; Or, The Modern Prometheus"},{"id":"g62404","title":"Frankenstein, ou le Prométhée moderne Volume 1 (of 3)"},{"id":"g62405","title":"Frankenstein, ou le Prométhée moderne Volume 2 (of 3)"},{"id":"g62406","title":"Frankenstein, ou le Prométhée moderne Volume 3 (of 3)"},{"id":"g84","title":"Frankenstein; or, the modern prometheus"}],"total":6,"hasMore":false,"cursor":"g84"},"fin":true}
{"id":2,"data":{"items":[{"id":"g10102","title":"The Czar's Spy: The Mystery of a Silent Love"},{"id":"g10342","title":"The Velvet Glove"},{"id":"g10379","title":"At love's cost"},{"id":"g10417","title":"Love, Life & Work: Being a Book of Opinions Reasonably Good-Natured Concerning How to Attain the Highest Happiness for One's Self with the Least Possible Harm to Others"},{"id":"g10671","title":"The Botanic Garden. Part 2, Containing the Loves of the Plants. A Poem.: With Philosophical Notes."},{"id":"g10850","title":"Philaster; Or, Love Lies a Bleeding"},{"id":"g10957","title":"The Love Affairs of Great Musicians, Volume 1"},{"id":"g1109","title":"Love's Labour's Lost"},{"id":"g11107","title":"Theobald, the Iron-Hearted; Or, Love to Enemies"},{"id":"g11213","title":"Brotherly Love: Shewing That as Merely Human It May Not Always Be Depended Upon"},{"id":"g11248","title":"The Delights of Wisdom Pertaining to Conjugial Love: To Which is Added The Pleasures of Insanity Pertaining To Scortatory Love"},{"id":"g11360","title":"Sacred and Profane Love: A Novel in Three Episodes"},{"id":"g11365","title":"The Fern Lover's Companion: A Guide for the Northeastern States and Canada"},{"id":"g1137","title":"A Lover's Complaint"},{"id":"g11377","title":"The Man Whom the Trees Loved"},{"id":"g11419","title":"The Love Affairs of Great Musicians, Volume 2"},{"id":"g11640","title":"Love and Mr. Lewisham"},{"id":"g11924","title":"The Loves of Krishna in Indian Painting and Poetry"},{"id":"g11934","title":"Primitive Love and Love-Stories"},{"id":"g12015","title":"Love under Fire"}],"total":556,"hasMore":true,"cursor":"g12015"},"fin":true}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "titleContains": "frankenstein"
        },
        "page": {
          "first": 50
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "filter": {
          "titleContains": "love"
        },
        "page": {
          "first": 20
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 141 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"titleContains":"frankenstein"},"page":{"first":50}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":2,"op":"books","args":{"filter":{"titleContains":"love"},"page":{"first":20}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 1704 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g41445","title":"Frankenstein; Or, The Modern Prometheus"},{"id":"g42324","title":"Frankenstein; Or, The Modern Prometheus"},{"id":"g62404","title":"Frankenstein, ou le Prométhée moderne Volume 1 (of 3)"},{"id":"g62405","title":"Frankenstein, ou le Prométhée moderne Volume 2 (of 3)"},{"id":"g62406","title":"Frankenstein, ou le Prométhée moderne Volume 3 (of 3)"},{"id":"g84","title":"Frankenstein; or, the modern prometheus"}],"total":6,"hasMore":false,"cursor":"g84"},"fin":true}
{"id":2,"data":{"items":[{"id":"g10102","title":"The Czar's Spy: The Mystery of a Silent Love"},{"id":"g10342","title":"The Velvet Glove"},{"id":"g10379","title":"At love's cost"},{"id":"g10417","title":"Love, Life & Work: Being a Book of Opinions Reasonably Good-Natured Concerning How to Attain the Highest Happiness for One's Self with the Least Possible Harm to Others"},{"id":"g10671","title":"The Botanic Garden. Part 2, Containing the Loves of the Plants. A Poem.: With Philosophical Notes."},{"id":"g10850","title":"Philaster; Or, Love Lies a Bleeding"},{"id":"g10957","title":"The Love Affairs of Great Musicians, Volume 1"},{"id":"g1109","title":"Love's Labour's Lost"},{"id":"g11107","title":"Theobald, the Iron-Hearted; Or, Love to Enemies"},{"id":"g11213","title":"Brotherly Love: Shewing That as Merely Human It May Not Always Be Depended Upon"},{"id":"g11248","title":"The Delights of Wisdom Pertaining to Conjugial Love: To Which is Added The Pleasures of Insanity Pertaining To Scortatory Love"},{"id":"g11360","title":"Sacred and Profane Love: A Novel in Three Episodes"},{"id":"g11365","title":"The Fern Lover's Companion: A Guide for the Northeastern States and Canada"},{"id":"g1137","title":"A Lover's Complaint"},{"id":"g11377","title":"The Man Whom the Trees Loved"},{"id":"g11419","title":"The Love Affairs of Great Musicians, Volume 2"},{"id":"g11640","title":"Love and Mr. Lewisham"},{"id":"g11924","title":"The Loves of Krishna in Indian Painting and Poetry"},{"id":"g11934","title":"Primitive Love and Love-Stories"},{"id":"g12015","title":"Love under Fire"}],"total":556,"hasMore":true,"cursor":"g12015"},"fin":true}

Author bibliography, 50 per page (Mark Twain 196, William Shakespeare 330)

Rayfold ahead

Measured: round trips and bytes to page through both (bytes on the wire (request + response), lower is better)

RESTREST: 75,860 bytes on the wire (request + response)75,860GraphQLGraphQL: 31,394 bytes on the wire (request + response)31,394RayfoldRayfold: 23,491 bytes on the wire (request + response)23,491
REST
11 round trips, 75860 B (whole book resources)
GraphQL
11 round trips, 31394 B
Rayfold
11 round trips, 23491 B

Every stack follows its cursor, so round trips are equal and bytes decide. The catalogue lists Mark Twain twice (ga43 with 196 books, ga10926 with 1). Rayfold is measured as its client sends when it has the schema: compact frames in its binary encoding (RB). The identical ops as JSON took 31434 B, with the identical data

See the real requests and responses (46)

REST 13 requests

GET /authors/ga43/books?limit=50
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "7573b750abab2b86"

{"items":[{"id":"g102","title":"The Tragedy of Pudd'nhead Wilson","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g1044","title":"Extract from Captain Stormfield's Visit to Heaven","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g1086","title":"A Horse's Tale","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g11622","title":"Plus fort que Sherlock Holmès","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g119","title":"A Tramp Abroad","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g1213","title":"The Man That Corrupted Hadleyburg","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g142","title":"The $30,000 Bequest, and Other Stories","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g17945","title":"Mark Twain: Tri Noveloj","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g1837","title":"The Prince and the Pauper","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g18381","title":"De Lotgevallen van Tom Sawyer","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g1892","title":"Extracts from Adam's Diary, translated from the original ms.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g19484","title":"Editorial Wild Oats","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g19987","title":"Chapters from My Autobiography","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g20943","title":"Mark Twain: Tri Ceteraj Noveloj","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g2431","title":"Is Shakespeare Dead?: From My Autobiography","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g245","title":"Life on the Mississippi","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g2572","title":"On the Decay of the Art of Lying","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g2874","title":"Personal Recollections of Joan of Arc — Volume 1","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g2875","title":"Personal Recollections of Joan of Arc — Volume 2","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g28803","title":"The Works of Mark Twain: An Index of all Project Gutenberg Editions","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g2895","title":"Following the Equator: A Journey Around the World","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g30165","title":"Die Abenteuer Tom Sawyers","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g30890","title":"Les Aventures De Tom Sawyer","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3171","title":"In Defence of Harriet Shelley","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3172","title":"Fenimore Cooper's Literary Offences","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3173","title":"Essays on Paul Bourget","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3174","title":"A Dog's Tale","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3175","title":"Mark Twain's Burlesque Autobiography","format":"EBOOK","price":"0.00","stock":1000000,"authorI
... (7482 bytes in full, cut for the report)
GET /authors/ga43/books?limit=50&after=g3197
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d32b9049c1240d07"

{"items":[{"id":"g3198","title":"Mark Twain's Letters — Volume 6 (1907-1910)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3199","title":"Mark Twain's Letters — Complete (1853-1910)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3200","title":"The Entire Project Gutenberg Works of Mark Twain","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g32325","title":"The Adventures of Huckleberry Finn (Tom Sawyer's Comrade)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3250","title":"How to Tell a Story, and Other Essays","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3251","title":"The Man That Corrupted Hadleyburg, and Other Stories","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g33077","title":"The Treaty With China, its Provisions Explained: New York Tribune, Tuesday, August 28, 1868","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3432","title":"Quotations from the Project Gutenberg Editions of the Works of Mark Twain","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g45333","title":"Tom Sawyer: Koulupojan historia","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g47095","title":"Huckleberry Finnin (Tom Sawyerin toverin) seikkailut","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g47257","title":"Prinssi ja kerjäläispoika","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g47410","title":"Tom Sawyer salapoliisina: Huck Finnin kertomus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g47411","title":"Tom Sawyer ilmailija: Huckleberry Finn'in jatko","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g48397","title":"Luotsina Mississippi-joella: Humoristinen kertomus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g48412","title":"Johanna d'Arc: Kertomus hänen elämästään ja marttyrikuolemastaan","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g48415","title":"Jenkkejä maailmalla I: Heidän toivioretkensä Pyhälle Maalle","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g48416","title":"Jenkkejä maailmalla II: Heidän toivioretkensä Pyhälle Maalle","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g50109","title":"The Mysterious Stranger: A Romance","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g51795","title":"Taivasko vai helvetti y.m. humoreskeja","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g53301","title":"Nimensä pilannut kaupunki","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g5688","title":"The Innocents Abroad — Volume 01","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g5689","title":"The Innocents Abroad — Volume 02","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g5690","title":"The Innocents Abroad — Volume 03","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g5691","title":"The Innocents Abroad — Volume 04","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g5692","title":"The Innocents Abroad — Volume 05","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g5693","title":"The Innocents Abroad — Volume 06","format":"EBOOK","price":"0.00
... (7811 bytes in full, cut for the report)
11 more requests
GET /authors/ga43/books?limit=50&after=g5838
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "28789810ba219391"

{"items":[{"id":"g5839","title":"Sketches New and Old, Part 4.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g5840","title":"Sketches New and Old, Part 5.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g5841","title":"Sketches New and Old, Part 6.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g5842","title":"Sketches New and Old, Part 7.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g60900","title":"Merry Tales","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g61338","title":"Moments with Mark Twain","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g61522","title":"The £1,000,000 bank-note, and other new stories","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g61644","title":"Salapoliisijuttu sekin y.m. kertomuksia","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g62636","title":"To the Person Sitting in Darkness","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g62739","title":"King Leopold's Soliloquy: A Defense of His Congo Rule","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g64417","title":"Tom Sawyers Abenteuer und Streiche","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g64482","title":"Abenteuer und Fahrten des Huckleberry Finn","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g64718","title":"Skizzenbuch","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g64869","title":"Auf dem Mississippi; Nach dem fernen Westen","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g65089","title":"Im Gold- und Silberland","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g65212","title":"Reisebilder und verschiedene Skizzen","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g65346","title":"Tom Sawyers Neue Abenteuer","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g65648","title":"Querkopf Wilson","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g66159","title":"Huckleberry Finn kalandjai","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g66437","title":"Meine Reise um die Welt. Erste Abteilung","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g66673","title":"Meine Reise um die Welt. Zweite Abteilung","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g66904","title":"Adams Tagebuch, und andere Erzählungen","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g66952","title":"Wie Hadleyburg verderbt wurde: Nebst anderen Erzählungen","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g68604","title":"Europe and elsewhere","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g70","title":"What Is Man? and Other Essays","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g70778","title":"Un pari de milliardaires et autres nouvelles","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7100","title":"Adventures of Huckleberry Finn, Chapters 01 to 05","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7101","title":"Adventures of Huckleberry Finn, Chapters 06 to 10","format":"EBOOK","pr
... (7570 bytes in full, cut for the report)
GET /authors/ga43/books?limit=50&after=g7197
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "2a6d34f9cff33a2d"

{"items":[{"id":"g7198","title":"The Adventures of Tom Sawyer, Part 6.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7199","title":"The Adventures of Tom Sawyer, Part 7.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7200","title":"The Adventures of Tom Sawyer, Part 8.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7242","title":"A Connecticut Yankee in King Arthur's Court, Part 1.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7243","title":"A Connecticut Yankee in King Arthur's Court, Part 2.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7244","title":"A Connecticut Yankee in King Arthur's Court, Part 3.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7245","title":"A Connecticut Yankee in King Arthur's Court, Part 4.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7246","title":"A Connecticut Yankee in King Arthur's Court, Part 5.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7247","title":"A Connecticut Yankee in King Arthur's Court, Part 6.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7248","title":"A Connecticut Yankee in King Arthur's Court, Part 7.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g72486","title":"Les Peterkins","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7249","title":"A Connecticut Yankee in King Arthur's Court, Part 8.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7250","title":"A Connecticut Yankee in King Arthur's Court, Part 9.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g72726","title":"Le prétendant américain","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g74","title":"The Adventures of Tom Sawyer, Complete","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g75104","title":"Amerikkalaisia kaskuja","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g7556","title":"Quotes and Images From The Works of Mark Twain","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g76","title":"Adventures of Huckleberry Finn","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g78786","title":"Le cochon dans les trèfles","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g8471","title":"Life on the Mississippi, Part 1.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g8472","title":"Life on the Mississippi, Part 2.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g8473","title":"Life on the Mississippi, Part 3.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g8474","title":"Life on the Mississippi, Part 4.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g8475","title":"Life on the Mississippi, Part 5.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g8476","title":"Life on the Mississippi, Part 6.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g8477","title":"Life on the Mississippi, Part 7.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g8478","title":"Life on the Mississippi, Part 8.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43
... (6778 bytes in full, cut for the report)
GET /authors/ga56/books?limit=50
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "b0fa6ed64fc0b255"

{"items":[{"id":"g100","title":"The Complete Works of William Shakespeare","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1041","title":"Shakespeare's Sonnets","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1045","title":"Venus and Adonis","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g10606","title":"Hamlet: A Study with the Text of the Folio of 1623","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1100","title":"King Henry VI, Part 1","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1101","title":"King Henry VI, Part 2","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1102","title":"King Henry VI, Part 3","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1103","title":"King Richard III","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1104","title":"The Comedy of Errors","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1105","title":"The Sonnets","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1106","title":"Titus Andronicus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1107","title":"The Taming of the Shrew","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1108","title":"The Two Gentlemen of Verona","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1109","title":"Love's Labour's Lost","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1110","title":"King John","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1111","title":"King Richard II","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1112","title":"Romeo and Juliet","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1113","title":"A Midsummer Night's Dream","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1114","title":"The Merchant of Venice","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1115","title":"King Henry IV, Part 1","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1116","title":"The Merry Wives of Windsor","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1117","title":"King Henry IV, Part 2","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1118","title":"Much Ado about Nothing","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1119","title":"King Henry V","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1120","title":"Julius Caesar","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1121","title":"As You Like It","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1122","title":"Hamlet","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1123","title":"Twelfth Night","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1124","title":"Troilus and Cressida","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1125","title":"All's Well That Ends Well","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1126","title":"Measure for Measure","format":"EBOOK","
... (6845 bytes in full, cut for the report)
GET /authors/ga56/books?limit=50&after=g15032
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "3ad85ec1fb0bdf1f"

{"items":[{"id":"g1504","title":"The Comedy of Errors","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1505","title":"The Rape of Lucrece","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1506","title":"The Two Noble Kinsmen","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1507","title":"Titus Andronicus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g15071","title":"La Tempête","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1508","title":"The Taming of the Shrew","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1509","title":"The Two Gentlemen of Verona","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1510","title":"Love's Labour's Lost","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1511","title":"King John","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1512","title":"King Richard II","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1513","title":"Romeo and Juliet","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1514","title":"A Midsummer Night's Dream","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1515","title":"The Merchant of Venice","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1516","title":"King Henry IV, Part 1","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1517","title":"The Merry Wives of Windsor","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1518","title":"King Henry IV, Part 2","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1519","title":"Much Ado about Nothing","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1520","title":"Much Ado about Nothing","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1521","title":"King Henry V","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1522","title":"Julius Caesar","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1523","title":"As You Like It","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1524","title":"Hamlet","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1525","title":"The Phoenix and the Turtle","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1526","title":"Twelfth Night","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1527","title":"Twelfth Night","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1528","title":"Troilus and Cressida","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1529","title":"All's Well That Ends Well","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1530","title":"Measure for Measure","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g15303","title":"Coriolan","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1531","title":"Othello","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1532","title":"King Lear","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g15
... (6594 bytes in full, cut for the report)
GET /authors/ga56/books?limit=50&after=g15847
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "01ed2d6e2740b0c4"

{"items":[{"id":"g15848","title":"La Comédie des Méprises","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g15849","title":"Timon d'Athènes","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g15942","title":"Antoine et Cléopâtre","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g16128","title":"Le Jour des Rois","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g16490","title":"Kuningas Lear","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g16618","title":"Antonius ja Cleopatra","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g16710","title":"Les Deux Gentilshommes de Vérone","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g16893","title":"Macbeth","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g17046","title":"Les alegres comares de Windsor","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1736","title":"Thomas Lord Cromwell","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g17529","title":"Othello","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1765","title":"King Henry VI, Part 1","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1768","title":"King Richard III","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g17686","title":"Troilus ja Cressida","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1769","title":"The Comedy of Errors","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1770","title":"King Edward III","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1771","title":"Titus Andronicus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1772","title":"The Taming of the Shrew","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1773","title":"The Two Gentlemen of Verona","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1774","title":"Love's Labour's Lost","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1775","title":"King John","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1776","title":"King Richard II","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1777","title":"Romeo and Juliet","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1778","title":"A Midsummer Night's Dream","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1779","title":"The Merchant of Venice","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1780","title":"King Henry IV, Part 1","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1781","title":"The Merry Wives of Windsor","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1782","title":"King Henry IV, Part 2","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1783","title":"Much Ado About Nothing","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1784","title":"King Henry V","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1785","title":"Julius Caesar","format":"EBOOK","price":"0.00","stock":1000000
... (6655 bytes in full, cut for the report)
GET /authors/ga56/books?limit=50&after=g18144
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c03281247ca88062"

{"items":[{"id":"g18162","title":"Comme il vous plaira","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g18169","title":"Mesure pour mesure","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g18179","title":"Othello","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g18311","title":"Le conte d'hiver","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g18312","title":"Le roi Lear","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g18313","title":"Troïlus et Cressida","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g18512","title":"Julius Caesar","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g19201","title":"Cymbeline: Tragédie","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g19219","title":"La méchante femme mise à la raison: Comédie","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g19227","title":"Peines d'amour perdues: Comédie","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g19228","title":"Périclès: Tragédie","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g20188","title":"Coriolanus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g20720","title":"Les joyeuses Bourgeoises de Windsor","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g20773","title":"Le marchand de Venise","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g21100","title":"Titus Andronicus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g21277","title":"La vie et la mort du roi Richard II","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g21856","title":"Le roi Jean","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g22045","title":"La festa dels reis: Lo que vulgueu","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2235","title":"The Tempest","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2236","title":"The Two Gentlemen of Verona","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2237","title":"The Merry Wives of Windsor","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2238","title":"Measure for Measure","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2239","title":"The Comedy of Errors","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2240","title":"Much Ado about Nothing","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2241","title":"Love's Labour's Lost","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2242","title":"A Midsummer Night's Dream","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2243","title":"The Merchant of Venice","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2244","title":"As You Like It","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2245","title":"The Taming of the Shrew","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2246","title":"All's Well That Ends Well","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2247","ti
... (6708 bytes in full, cut for the report)
GET /authors/ga56/books?limit=50&after=g2265
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "166cea5a4b394b32"

{"items":[{"id":"g2266","title":"King Lear","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2267","title":"Othello","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2268","title":"Antony and Cleopatra","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2269","title":"Cymbeline","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g2270","title":"Shakespeare's First Folio","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g22760","title":"Henri IV (1re partie)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g22791","title":"King Henry V: Arranged for Representation at the Princess's Theatre","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g23041","title":"The Works of William Shakespeare [Cambridge Edition] [Vol. 1 of 9]: Introduction and Publisher's Advertising","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g23042","title":"The Tempest: The Works of William Shakespeare [Cambridge Edition] [9 vols.]","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g23043","title":"Two Gentlemen of Verona: The Works of William Shakespeare [Cambridge Edition] [9 vols.]","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g23044","title":"The Merry Wives of Windsor: The Works of William Shakespeare [Cambridge Edition] [9 vols.]","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g23045","title":"Measure for Measure: The Works of William Shakespeare [Cambridge Edition] [9 vols.]","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g23046","title":"The Comedy of Errors: The Works of William Shakespeare [Cambridge Edition] [9 vols.]","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g23676","title":"Titus Andronicus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g25667","title":"Hamlet: Drama em cinco Actos","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g25694","title":"Venus et Adonis","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g25707","title":"Titus Andronicus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g25715","title":"Henri IV (2e partie)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g25843","title":"De Klucht der Vergissingen","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g26169","title":"La Tempesta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g26594","title":"Twee Edellieden van Verona","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g26757","title":"La mort de Lucrèce","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g26758","title":"La plainte d'une amante","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g26759","title":"La vie et la mort du roi Richard III","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g26762","title":"Henri V","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g26763","title":"Henri VI (1/3)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g26764","title":"Henri VI (2/3)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g26765","title":"Henri V
... (7499 bytes in full, cut for the report)
GET /authors/ga56/books?limit=50&after=g37835
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "4688583246fcca34"

{"items":[{"id":"g38901","title":"Twelfth Night","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g39557","title":"Kuningas Henrik Neljäs I","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g39636","title":"Kuningas Henrik Neljäs II","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g39939","title":"Kuningas Henrik Viides","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g40070","title":"Kuningas Henrik Kuudes I","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g40115","title":"Kuningas Henrik Kuudes II","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g40174","title":"Kuningas Henrik Kuudes III","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g4031","title":"The London Prodigal","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g4214","title":"The Puritan Widow","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g4255","title":"A Yorkshire Tragedy","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g42873","title":"Kuningas Henrik Kahdeksas","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g42898","title":"Paljo melua tyhjästä","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g42966","title":"Kuinka äkäpussi kesytetään","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g43440","title":"Arden of Feversham","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g43532","title":"Miten haluatte","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g44158","title":"Hairauksia","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g44580","title":"Loppu hyvä, kaikki hyvä","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g44602","title":"Turhaa lemmen touhua","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g44825","title":"Verta verrasta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g44826","title":"Iloiset Windsorin rouvat","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g44831","title":"Kesäyön unelma","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g44832","title":"Venetian kauppias","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g44839","title":"Kaksi nuorta veronalaista","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g44840","title":"Talvinen tarina","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g44845","title":"Myrsky","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g45128","title":"The Works of William Shakespeare [Cambridge Edition] [Vol. 2 of 9]","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g46768","title":"Julius Cæsar","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g47518","title":"The Tempest","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g47715","title":"The Works of William Shakespeare [Cambridge Edition] [Vol. 7 of 9]","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g4774","title":"The Merry Devil of Edmonton","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga
... (7152 bytes in full, cut for the report)
GET /authors/ga56/books?limit=50&after=g63368
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8f69ae3e59230d07"

{"items":[{"id":"g64102","title":"Flowers from Shakespeare's Garden: A Posy from the Plays","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g67635","title":"Koning Hendrik de Vijfde","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g6924","title":"Richard III","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g6975","title":"Macbeth","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g6990","title":"Coriolanus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g6996","title":"Romeo und Julia","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7022","title":"Ein Sommernachtstraum","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7041","title":"Wie es Euch gefällt","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7043","title":"Der Kaufmann von Venedig","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g71836","title":"La ventego de Shakespeare","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7185","title":"Othello","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7186","title":"Was ihr wollt","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7225","title":"Die Irrungen, oder die Doppelten Zwillinge","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7226","title":"Timon von Athen","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7232","title":"Romeo und Juliette","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7233","title":"Maaß für Maaß: Wie einer mißt, so wird ihm wieder gemessen","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7236","title":"Der Sturm, oder Die bezauberte Insel","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7240","title":"Das Leben und der Tod des Königs Lear","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7264","title":"Ein St.-Johannis-Nachts-Traum","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7269","title":"Macbeth","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7276","title":"Hamlet, Prinz von Dännemark","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7292","title":"Leben und Tod des Königs Johann","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7323","title":"Leben und Tod Königs Richard des zweyten","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g75268","title":"Koning Hendrik de Zesde","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g76912","title":"Koning Richard de Derde","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g76946","title":"De vroolijke vrouwtjes van Windsor","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7933","title":"König Heinrich der vierte. Der Erste Theil","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g7934","title":"König Heinrich der vierte. Der Zweyte Theil, der seinen Tod, und die Crönung von Heinrich dem fünften enthält.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g9077","title":"Hamlet: The First ('Bad') Quarto","format":"EBOOK","price":"0
... (4345 bytes in full, cut for the report)

cross-check, not measured: Mark Twain through GET /books?authorId=

GET /books?authorId=ga43&limit=200
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "476d95395feecb40"

{"items":[{"id":"g102","title":"The Tragedy of Pudd'nhead Wilson","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g1044","title":"Extract from Captain Stormfield's Visit to Heaven","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g1086","title":"A Horse's Tale","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g11622","title":"Plus fort que Sherlock Holmès","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g119","title":"A Tramp Abroad","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g1213","title":"The Man That Corrupted Hadleyburg","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g142","title":"The $30,000 Bequest, and Other Stories","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g17945","title":"Mark Twain: Tri Noveloj","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g1837","title":"The Prince and the Pauper","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g18381","title":"De Lotgevallen van Tom Sawyer","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g1892","title":"Extracts from Adam's Diary, translated from the original ms.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g19484","title":"Editorial Wild Oats","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g19987","title":"Chapters from My Autobiography","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g20943","title":"Mark Twain: Tri Ceteraj Noveloj","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g2431","title":"Is Shakespeare Dead?: From My Autobiography","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g245","title":"Life on the Mississippi","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g2572","title":"On the Decay of the Art of Lying","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g2874","title":"Personal Recollections of Joan of Arc — Volume 1","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g2875","title":"Personal Recollections of Joan of Arc — Volume 2","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g28803","title":"The Works of Mark Twain: An Index of all Project Gutenberg Editions","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g2895","title":"Following the Equator: A Journey Around the World","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g30165","title":"Die Abenteuer Tom Sawyers","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g30890","title":"Les Aventures De Tom Sawyer","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3171","title":"In Defence of Harriet Shelley","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3172","title":"Fenimore Cooper's Literary Offences","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3173","title":"Essays on Paul Bourget","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3174","title":"A Dog's Tale","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga43","ownerId":"gutenberg"},{"id":"g3175","title":"Mark Twain's Burlesque Autobiography","format":"EBOOK","price":"0.00","stock":1000000,"authorI
... (29476 bytes in full, cut for the report)

cross-check, not measured: William Shakespeare through QUERY /books

QUERY /books
content-type: application/json

{
  "filter": {
    "authorId": "ga56"
  },
  "limit": 400
}
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "f477ab33a994925c"

{"items":[{"id":"g100","title":"The Complete Works of William Shakespeare","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1041","title":"Shakespeare's Sonnets","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1045","title":"Venus and Adonis","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g10606","title":"Hamlet: A Study with the Text of the Folio of 1623","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1100","title":"King Henry VI, Part 1","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1101","title":"King Henry VI, Part 2","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1102","title":"King Henry VI, Part 3","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1103","title":"King Richard III","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1104","title":"The Comedy of Errors","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1105","title":"The Sonnets","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1106","title":"Titus Andronicus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1107","title":"The Taming of the Shrew","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1108","title":"The Two Gentlemen of Verona","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1109","title":"Love's Labour's Lost","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1110","title":"King John","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1111","title":"King Richard II","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1112","title":"Romeo and Juliet","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1113","title":"A Midsummer Night's Dream","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1114","title":"The Merchant of Venice","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1115","title":"King Henry IV, Part 1","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1116","title":"The Merry Wives of Windsor","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1117","title":"King Henry IV, Part 2","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1118","title":"Much Ado about Nothing","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1119","title":"King Henry V","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1120","title":"Julius Caesar","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1121","title":"As You Like It","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1122","title":"Hamlet","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1123","title":"Twelfth Night","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1124","title":"Troilus and Cressida","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1125","title":"All's Well That Ends Well","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1126","title":"Measure for Measure","format":"EBOOK","
... (45463 bytes in full, cut for the report)

GraphQL 11 requests

POST /graphql
content-type: application/json

{
  "query": "query($a: ID!, $after: String) { books(authorId: $a, first: 50, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "a": "ga43",
    "after": null
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g102",
          "title": "The Tragedy of Pudd'nhead Wilson"
        },
        {
          "id": "g1044",
          "title": "Extract from Captain Stormfield's Visit to Heaven"
        },
        {
          "id": "g1086",
          "title": "A Horse's Tale"
        },
... 195 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "g102",
          "title": "The Tragedy of Pudd'nhead Wilson"
        },
        {
          "id": "g1044",
          "title": "Extract from Captain Stormfield's Visit to Heaven"
        },
        {
          "id": "g1086",
          "title": "A Horse's Tale"
        },
        {
          "id": "g11622",
          "title": "Plus fort que Sherlock Holmès"
        },
        {
          "id": "g119",
          "title": "A Tramp Abroad"
        },
        {
          "id": "g1213",
          "title": "The Man That Corrupted Hadleyburg"
        },
        {
          "id": "g142",
          "title": "The $30,000 Bequest, and Other Stories"
        },
        {
          "id": "g17945",
          "title": "Mark Twain: Tri Noveloj"
        },
        {
          "id": "g1837",
          "title": "The Prince and the Pauper"
        },
        {
          "id": "g18381",
          "title": "De Lotgevallen van Tom Sawyer"
        },
        {
          "id": "g1892",
          "title": "Extracts from Adam's Diary, translated from the original ms."
        },
        {
          "id": "g19484",
          "title": "Editorial Wild Oats"
        },
        {
          "id": "g19987",
          "title": "Chapters from My Autobiography"
        },
        {
          "id": "g20943",
          "title": "Mark Twain: Tri Ceteraj Noveloj"
        },
        {
          "id": "g2431",
          "title": "Is Shakespeare Dead?: From My Autobiography"
        },
        {
          "id": "g245",
          "title": "Life on the Mississippi"
        },
        {
          "id": "g2572",
          "title": "On the Decay of the Art of Lying"
        },
        {
          "id": "g2874",
          "title": "Personal Recollections of Joan of Arc — Volume 1"
        },
        {
          "id": "g2875",
          "title": "Personal Recollections of Joan of Arc — Volume 2"
        },
        {
          "id": "g28803",
          "title": "The Works of Mark Twain: An Index of all Project Gutenberg Editions"
        },
        {
          "id": "g2895",
          "title": "Following the Equator: A Journey Around the World"
        },
        {
          "id": "g30165",
          "title": "Die Abenteuer Tom Sawyers"
        },
        {
          "id": "g30890",
          "title": "Les Aventures De Tom Sawyer"
        },
        {
          "id": "g3171",
          "title": "In Defence of Harriet Shelley"
        },
        {
          "id": "g3172",
          "title": "Fenimore Cooper's Literary Offences"
        },
        {
          "id": "g3173",
          "title": "Essays on Paul Bourget"
        },
        {
          "id": "g3174",
          "title": "A Dog's Tale"
        },
        {
          "id": "g3175",
          "title": "Mark Twain's Burlesque Autobiography"
        },
        {
          "id": "g3176",
          "title": "The Innocents Abroad"
        },
        {
          "id": "g3177",
          "title": "Roughing It"
        },
        {
          "id": "g3178",
          "title": "The Gilded Age: A Tale of Today"
        },
        {
          "id": "g3179",
          "title": "The American Claimant"
        },
        {
          "id": "g3180",
          "title": "A Double Barrelled Detective Story"
        },
        {
          "id": "g3181",
          "title": "The Stolen White Elephant"
        },
        {
          "id": "g3182",
          "title": "Some Rambling Notes of an Idle Excursion"
        },
        {
          "id": "g3183",
          "title": "The Facts Concerning the Recent Carnival of Crime in Connecticut"
        },
        {
          "id": "g3184",
          "title": "Alonzo Fitz, and Other Stories"
        },
        {
          "id": "g3185",
          "title": "Those Extraordinary Twins"
        },
        {
          "id": "g3186",
          "title": "The Mysterious Stranger, and Other Stories"
        },
        {
          "id": "g3187",
          "title": "Christian Science"
        },
        {
          "id": "g3188",
          "title": "Mark Twain's Speeches"
        },
        {
          "id": "g3189",
          "title": "Sketches New and Old"
        },
        {
          "id": "g3190",
          "title": "1601: Conversation as it was by the Social Fireside in the Time of the Tudors"
        },
        {
          "id": "g3191",
          "title": "Goldsmith's Friend Abroad Again"
        },
        {
          "id": "g3192",
          "title": "The Curious Republic of Gondour, and Other Whimsical Sketches"
        },
        {
          "id": "g3193",
          "title": "Mark Twain's Letters — Volume 1 (1853-1866)"
        },
        {
          "id": "g3194",
          "title": "Mark Twain's Letters — Volume 2 (1867-1875)"
        },
        {
          "id": "g3195",
          "title": "Mark Twain's Letters — Volume 3 (1876-1885)"
        },
        {
          "id": "g3196",
          "title": "Mark Twain's Letters — Volume 4 (1886-1900)"
        },
        {
          "id": "g3197",
          "title": "Mark Twain's Letters — Volume 5 (1901-1906)"
        }
      ],
      "total": 196,
      "hasMore": true,
      "cursor": "g3197"
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "query($a: ID!, $after: String) { books(authorId: $a, first: 50, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "a": "ga43",
    "after": "g3197"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g3198",
          "title": "Mark Twain's Letters — Volume 6 (1907-1910)"
        },
        {
          "id": "g3199",
          "title": "Mark Twain's Letters — Complete (1853-1910)"
        },
        {
          "id": "g3200",
          "title": "The Entire Project Gutenberg Works of Mark Twain"
        },
... 195 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "g3198",
          "title": "Mark Twain's Letters — Volume 6 (1907-1910)"
        },
        {
          "id": "g3199",
          "title": "Mark Twain's Letters — Complete (1853-1910)"
        },
        {
          "id": "g3200",
          "title": "The Entire Project Gutenberg Works of Mark Twain"
        },
        {
          "id": "g32325",
          "title": "The Adventures of Huckleberry Finn (Tom Sawyer's Comrade)"
        },
        {
          "id": "g3250",
          "title": "How to Tell a Story, and Other Essays"
        },
        {
          "id": "g3251",
          "title": "The Man That Corrupted Hadleyburg, and Other Stories"
        },
        {
          "id": "g33077",
          "title": "The Treaty With China, its Provisions Explained: New York Tribune, Tuesday, August 28, 1868"
        },
        {
          "id": "g3432",
          "title": "Quotations from the Project Gutenberg Editions of the Works of Mark Twain"
        },
        {
          "id": "g45333",
          "title": "Tom Sawyer: Koulupojan historia"
        },
        {
          "id": "g47095",
          "title": "Huckleberry Finnin (Tom Sawyerin toverin) seikkailut"
        },
        {
          "id": "g47257",
          "title": "Prinssi ja kerjäläispoika"
        },
        {
          "id": "g47410",
          "title": "Tom Sawyer salapoliisina: Huck Finnin kertomus"
        },
        {
          "id": "g47411",
          "title": "Tom Sawyer ilmailija: Huckleberry Finn'in jatko"
        },
        {
          "id": "g48397",
          "title": "Luotsina Mississippi-joella: Humoristinen kertomus"
        },
        {
          "id": "g48412",
          "title": "Johanna d'Arc: Kertomus hänen elämästään ja marttyrikuolemastaan"
        },
        {
          "id": "g48415",
          "title": "Jenkkejä maailmalla I: Heidän toivioretkensä Pyhälle Maalle"
        },
        {
          "id": "g48416",
          "title": "Jenkkejä maailmalla II: Heidän toivioretkensä Pyhälle Maalle"
        },
        {
          "id": "g50109",
          "title": "The Mysterious Stranger: A Romance"
        },
        {
          "id": "g51795",
          "title": "Taivasko vai helvetti y.m. humoreskeja"
        },
        {
          "id": "g53301",
          "title": "Nimensä pilannut kaupunki"
        },
        {
          "id": "g5688",
          "title": "The Innocents Abroad — Volume 01"
        },
        {
          "id": "g5689",
          "title": "The Innocents Abroad — Volume 02"
        },
        {
          "id": "g5690",
          "title": "The Innocents Abroad — Volume 03"
        },
        {
          "id": "g5691",
          "title": "The Innocents Abroad — Volume 04"
        },
        {
          "id": "g5692",
          "title": "The Innocents Abroad — Volume 05"
        },
        {
          "id": "g5693",
          "title": "The Innocents Abroad — Volume 06"
        },
        {
          "id": "g5782",
          "title": "A Tramp Abroad — Volume 01"
        },
        {
          "id": "g5783",
          "title": "A Tramp Abroad — Volume 02"
        },
        {
          "id": "g5784",
          "title": "A Tramp Abroad — Volume 03"
        },
        {
          "id": "g5785",
          "title": "A Tramp Abroad — Volume 04"
        },
        {
          "id": "g5786",
          "title": "A Tramp Abroad — Volume 05"
        },
        {
          "id": "g5787",
          "title": "A Tramp Abroad — Volume 06"
        },
        {
          "id": "g5788",
          "title": "A Tramp Abroad — Volume 07"
        },
        {
          "id": "g5808",
          "title": "Following the Equator: A Journey Around the World. Part 1"
        },
        {
          "id": "g5809",
          "title": "Following the Equator: A Journey Around the World. Part 2"
        },
        {
          "id": "g5810",
          "title": "Following the Equator: A Journey Around the World. Part 3"
        },
        {
          "id": "g5811",
          "title": "Following the Equator: A Journey Around the World. Part 4"
        },
        {
          "id": "g5812",
          "title": "Following the Equator: A Journey Around the World. Part 5"
        },
        {
          "id": "g5813",
          "title": "Following the Equator: A Journey Around the World. Part 6"
        },
        {
          "id": "g5814",
          "title": "Following the Equator: A Journey Around the World. Part 7"
        },
        {
          "id": "g5818",
          "title": "The Gilded Age, Part 1."
        },
        {
          "id": "g5819",
          "title": "The Gilded Age, Part 2."
        },
        {
          "id": "g5820",
          "title": "The Gilded Age, Part 3."
        },
        {
          "id": "g5821",
          "title": "The Gilded Age, Part 4."
        },
        {
          "id": "g5822",
          "title": "The Gilded Age, Part 5."
        },
        {
          "id": "g5823",
          "title": "The Gilded Age, Part 6."
        },
        {
          "id": "g5824",
          "title": "The Gilded Age, Part 7."
        },
        {
          "id": "g5836",
          "title": "Sketches New and Old, Part 1."
        },
        {
          "id": "g5837",
          "title": "Sketches New and Old, Part 2."
        },
        {
          "id": "g5838",
          "title": "Sketches New and Old, Part 3."
        }
      ],
      "total": 196,
      "hasMore": true,
      "cursor": "g5838"
    }
  }
}
9 more requests
POST /graphql
content-type: application/json

{
  "query": "query($a: ID!, $after: String) { books(authorId: $a, first: 50, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "a": "ga43",
    "after": "g5838"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g5839",
          "title": "Sketches New and Old, Part 4."
        },
        {
          "id": "g5840",
          "title": "Sketches New and Old, Part 5."
        },
        {
          "id": "g5841",
          "title": "Sketches New and Old, Part 6."
        },
... 195 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "g5839",
          "title": "Sketches New and Old, Part 4."
        },
        {
          "id": "g5840",
          "title": "Sketches New and Old, Part 5."
        },
        {
          "id": "g5841",
          "title": "Sketches New and Old, Part 6."
        },
        {
          "id": "g5842",
          "title": "Sketches New and Old, Part 7."
        },
        {
          "id": "g60900",
          "title": "Merry Tales"
        },
        {
          "id": "g61338",
          "title": "Moments with Mark Twain"
        },
        {
          "id": "g61522",
          "title": "The £1,000,000 bank-note, and other new stories"
        },
        {
          "id": "g61644",
          "title": "Salapoliisijuttu sekin y.m. kertomuksia"
        },
        {
          "id": "g62636",
          "title": "To the Person Sitting in Darkness"
        },
        {
          "id": "g62739",
          "title": "King Leopold's Soliloquy: A Defense of His Congo Rule"
        },
        {
          "id": "g64417",
          "title": "Tom Sawyers Abenteuer und Streiche"
        },
        {
          "id": "g64482",
          "title": "Abenteuer und Fahrten des Huckleberry Finn"
        },
        {
          "id": "g64718",
          "title": "Skizzenbuch"
        },
        {
          "id": "g64869",
          "title": "Auf dem Mississippi; Nach dem fernen Westen"
        },
        {
          "id": "g65089",
          "title": "Im Gold- und Silberland"
        },
        {
          "id": "g65212",
          "title": "Reisebilder und verschiedene Skizzen"
        },
        {
          "id": "g65346",
          "title": "Tom Sawyers Neue Abenteuer"
        },
        {
          "id": "g65648",
          "title": "Querkopf Wilson"
        },
        {
          "id": "g66159",
          "title": "Huckleberry Finn kalandjai"
        },
        {
          "id": "g66437",
          "title": "Meine Reise um die Welt. Erste Abteilung"
        },
        {
          "id": "g66673",
          "title": "Meine Reise um die Welt. Zweite Abteilung"
        },
        {
          "id": "g66904",
          "title": "Adams Tagebuch, und andere Erzählungen"
        },
        {
          "id": "g66952",
          "title": "Wie Hadleyburg verderbt wurde: Nebst anderen Erzählungen"
        },
        {
          "id": "g68604",
          "title": "Europe and elsewhere"
        },
        {
          "id": "g70",
          "title": "What Is Man? and Other Essays"
        },
        {
          "id": "g70778",
          "title": "Un pari de milliardaires et autres nouvelles"
        },
        {
          "id": "g7100",
          "title": "Adventures of Huckleberry Finn, Chapters 01 to 05"
        },
        {
          "id": "g7101",
          "title": "Adventures of Huckleberry Finn, Chapters 06 to 10"
        },
        {
          "id": "g7102",
          "title": "Adventures of Huckleberry Finn, Chapters 11 to 15"
        },
        {
          "id": "g7103",
          "title": "Adventures of Huckleberry Finn, Chapters 16 to 20"
        },
        {
          "id": "g7104",
          "title": "Adventures of Huckleberry Finn, Chapters 21 to 25"
        },
        {
          "id": "g7105",
          "title": "Adventures of Huckleberry Finn, Chapters 26 to 30"
        },
        {
          "id": "g7106",
          "title": "Adventures of Huckleberry Finn, Chapters 31 to 35"
        },
        {
          "id": "g7107",
          "title": "Adventures of Huckleberry Finn, Chapters 36 to the Last"
        },
        {
          "id": "g7154",
          "title": "The Prince and the Pauper, Part 1."
        },
        {
          "id": "g7155",
          "title": "The Prince and the Pauper, Part 2."
        },
        {
          "id": "g7156",
          "title": "The Prince and the Pauper, Part 3."
        },
        {
          "id": "g7157",
          "title": "The Prince and the Pauper, Part 4."
        },
        {
          "id": "g7158",
          "title": "The Prince and the Pauper, Part 5."
        },
        {
          "id": "g7159",
          "title": "The Prince and the Pauper, Part 6."
        },
        {
          "id": "g7160",
          "title": "The Prince and the Pauper, Part 7."
        },
        {
          "id": "g7161",
          "title": "The Prince and the Pauper, Part 8."
        },
        {
          "id": "g7162",
          "title": "The Prince and the Pauper, Part 9."
        },
        {
          "id": "g71715",
          "title": "Le Legs de 30.000 dollars et autres contes"
        },
        {
          "id": "g71901",
          "title": "Contes choisis"
        },
        {
          "id": "g7193",
          "title": "The Adventures of Tom Sawyer, Part 1."
        },
        {
          "id": "g7194",
          "title": "The Adventures of Tom Sawyer, Part 2."
        },
        {
          "id": "g7195",
          "title": "The Adventures of Tom Sawyer, Part 3."
        },
        {
          "id": "g7196",
          "title": "The Adventures of Tom Sawyer, Part 4."
        },
        {
          "id": "g7197",
          "title": "The Adventures of Tom Sawyer, Part 5."
        }
      ],
      "total": 196,
      "hasMore": true,
      "cursor": "g7197"
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "query($a: ID!, $after: String) { books(authorId: $a, first: 50, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "a": "ga43",
    "after": "g7197"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g7198",
          "title": "The Adventures of Tom Sawyer, Part 6."
        },
        {
          "id": "g7199",
          "title": "The Adventures of Tom Sawyer, Part 7."
        },
        {
          "id": "g7200",
          "title": "The Adventures of Tom Sawyer, Part 8."
        },
... 179 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "g7198",
          "title": "The Adventures of Tom Sawyer, Part 6."
        },
        {
          "id": "g7199",
          "title": "The Adventures of Tom Sawyer, Part 7."
        },
        {
          "id": "g7200",
          "title": "The Adventures of Tom Sawyer, Part 8."
        },
        {
          "id": "g7242",
          "title": "A Connecticut Yankee in King Arthur's Court, Part 1."
        },
        {
          "id": "g7243",
          "title": "A Connecticut Yankee in King Arthur's Court, Part 2."
        },
        {
          "id": "g7244",
          "title": "A Connecticut Yankee in King Arthur's Court, Part 3."
        },
        {
          "id": "g7245",
          "title": "A Connecticut Yankee in King Arthur's Court, Part 4."
        },
        {
          "id": "g7246",
          "title": "A Connecticut Yankee in King Arthur's Court, Part 5."
        },
        {
          "id": "g7247",
          "title": "A Connecticut Yankee in King Arthur's Court, Part 6."
        },
        {
          "id": "g7248",
          "title": "A Connecticut Yankee in King Arthur's Court, Part 7."
        },
        {
          "id": "g72486",
          "title": "Les Peterkins"
        },
        {
          "id": "g7249",
          "title": "A Connecticut Yankee in King Arthur's Court, Part 8."
        },
        {
          "id": "g7250",
          "title": "A Connecticut Yankee in King Arthur's Court, Part 9."
        },
        {
          "id": "g72726",
          "title": "Le prétendant américain"
        },
        {
          "id": "g74",
          "title": "The Adventures of Tom Sawyer, Complete"
        },
        {
          "id": "g75104",
          "title": "Amerikkalaisia kaskuja"
        },
        {
          "id": "g7556",
          "title": "Quotes and Images From The Works of Mark Twain"
        },
        {
          "id": "g76",
          "title": "Adventures of Huckleberry Finn"
        },
        {
          "id": "g78786",
          "title": "Le cochon dans les trèfles"
        },
        {
          "id": "g8471",
          "title": "Life on the Mississippi, Part 1."
        },
        {
          "id": "g8472",
          "title": "Life on the Mississippi, Part 2."
        },
        {
          "id": "g8473",
          "title": "Life on the Mississippi, Part 3."
        },
        {
          "id": "g8474",
          "title": "Life on the Mississippi, Part 4."
        },
        {
          "id": "g8475",
          "title": "Life on the Mississippi, Part 5."
        },
        {
          "id": "g8476",
          "title": "Life on the Mississippi, Part 6."
        },
        {
          "id": "g8477",
          "title": "Life on the Mississippi, Part 7."
        },
        {
          "id": "g8478",
          "title": "Life on the Mississippi, Part 8."
        },
        {
          "id": "g8479",
          "title": "Life on the Mississippi, Part 9."
        },
        {
          "id": "g8480",
          "title": "Life on the Mississippi, Part 10."
        },
        {
          "id": "g8481",
          "title": "Life on the Mississippi, Part 11."
        },
        {
          "id": "g8482",
          "title": "Life on the Mississippi, Part 12."
        },
        {
          "id": "g8525",
          "title": "Eve's Diary, Complete"
        },
        {
          "id": "g8526",
          "title": "Eve's Diary, Part 1"
        },
        {
          "id": "g8527",
          "title": "Eve's Diary, Part 2"
        },
        {
          "id": "g8528",
          "title": "Eve's Diary, Part 3"
        },
        {
          "id": "g8582",
          "title": "Roughing It, Part 1."
        },
        {
          "id": "g8583",
          "title": "Roughing It, Part 2."
        },
        {
          "id": "g8584",
          "title": "Roughing It, Part 3."
        },
        {
          "id": "g8585",
          "title": "Roughing It, Part 4."
        },
        {
          "id": "g8586",
          "title": "Roughing It, Part 5."
        },
        {
          "id": "g8587",
          "title": "Roughing It, Part 6."
        },
        {
          "id": "g8588",
          "title": "Roughing It, Part 7."
        },
        {
          "id": "g8589",
          "title": "Roughing It, Part 8."
        },
        {
          "id": "g86",
          "title": "A Connecticut Yankee in King Arthur's Court"
        },
        {
          "id": "g91",
          "title": "Tom Sawyer Abroad"
        },
        {
          "id": "g93",
          "title": "Tom Sawyer, Detective"
        }
      ],
      "total": 196,
      "hasMore": false,
      "cursor": "g93"
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "query($a: ID!, $after: String) { books(authorId: $a, first: 50, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "a": "ga56",
    "after": null
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g100",
          "title": "The Complete Works of William Shakespeare"
        },
        {
          "id": "g1041",
          "title": "Shakespeare's Sonnets"
        },
        {
          "id": "g1045",
          "title": "Venus and Adonis"
        },
... 195 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "g100",
          "title": "The Complete Works of William Shakespeare"
        },
        {
          "id": "g1041",
          "title": "Shakespeare's Sonnets"
        },
        {
          "id": "g1045",
          "title": "Venus and Adonis"
        },
        {
          "id": "g10606",
          "title": "Hamlet: A Study with the Text of the Folio of 1623"
        },
        {
          "id": "g1100",
          "title": "King Henry VI, Part 1"
        },
        {
          "id": "g1101",
          "title": "King Henry VI, Part 2"
        },
        {
          "id": "g1102",
          "title": "King Henry VI, Part 3"
        },
        {
          "id": "g1103",
          "title": "King Richard III"
        },
        {
          "id": "g1104",
          "title": "The Comedy of Errors"
        },
        {
          "id": "g1105",
          "title": "The Sonnets"
        },
        {
          "id": "g1106",
          "title": "Titus Andronicus"
        },
        {
          "id": "g1107",
          "title": "The Taming of the Shrew"
        },
        {
          "id": "g1108",
          "title": "The Two Gentlemen of Verona"
        },
        {
          "id": "g1109",
          "title": "Love's Labour's Lost"
        },
        {
          "id": "g1110",
          "title": "King John"
        },
        {
          "id": "g1111",
          "title": "King Richard II"
        },
        {
          "id": "g1112",
          "title": "Romeo and Juliet"
        },
        {
          "id": "g1113",
          "title": "A Midsummer Night's Dream"
        },
        {
          "id": "g1114",
          "title": "The Merchant of Venice"
        },
        {
          "id": "g1115",
          "title": "King Henry IV, Part 1"
        },
        {
          "id": "g1116",
          "title": "The Merry Wives of Windsor"
        },
        {
          "id": "g1117",
          "title": "King Henry IV, Part 2"
        },
        {
          "id": "g1118",
          "title": "Much Ado about Nothing"
        },
        {
          "id": "g1119",
          "title": "King Henry V"
        },
        {
          "id": "g1120",
          "title": "Julius Caesar"
        },
        {
          "id": "g1121",
          "title": "As You Like It"
        },
        {
          "id": "g1122",
          "title": "Hamlet"
        },
        {
          "id": "g1123",
          "title": "Twelfth Night"
        },
        {
          "id": "g1124",
          "title": "Troilus and Cressida"
        },
        {
          "id": "g1125",
          "title": "All's Well That Ends Well"
        },
        {
          "id": "g1126",
          "title": "Measure for Measure"
        },
        {
          "id": "g1127",
          "title": "Othello"
        },
        {
          "id": "g1128",
          "title": "King Lear"
        },
        {
          "id": "g1129",
          "title": "The Tragedy of Macbeth"
        },
        {
          "id": "g1130",
          "title": "Antony and Cleopatra"
        },
        {
          "id": "g1131",
          "title": "Coriolanus"
        },
        {
          "id": "g1132",
          "title": "Timon of Athens"
        },
        {
          "id": "g1133",
          "title": "Cymbeline"
        },
        {
          "id": "g1134",
          "title": "The Winter's Tale"
        },
        {
          "id": "g1135",
          "title": "The Tempest"
        },
        {
          "id": "g1136",
          "title": "King Henry VIII"
        },
        {
          "id": "g1137",
          "title": "A Lover's Complaint"
        },
        {
          "id": "g12578",
          "title": "Shakespeare's play of the Merchant of Venice: Arranged for Representation at the Princess's Theatre, with Historical and Explanatory Notes by Charles Kean, F.S.A."
        },
        {
          "id": "g12842",
          "title": "A Fairy Tale in Two Acts Taken from Shakespeare (1763)"
        },
        {
          "id": "g13868",
          "title": "Macbeth"
        },
        {
          "id": "g1500",
          "title": "King Henry VI, Part 1"
        },
        {
          "id": "g1501",
          "title": "King Henry VI, Part 2"
        },
        {
          "id": "g1502",
          "title": "King Henry VI, Part 3"
        },
        {
          "id": "g1503",
          "title": "King Richard III"
        },
        {
          "id": "g15032",
          "title": "Hamlet"
        }
      ],
      "total": 330,
      "hasMore": true,
      "cursor": "g15032"
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "query($a: ID!, $after: String) { books(authorId: $a, first: 50, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "a": "ga56",
    "after": "g15032"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g1504",
          "title": "The Comedy of Errors"
        },
        {
          "id": "g1505",
          "title": "The Rape of Lucrece"
        },
        {
          "id": "g1506",
          "title": "The Two Noble Kinsmen"
        },
... 195 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "g1504",
          "title": "The Comedy of Errors"
        },
        {
          "id": "g1505",
          "title": "The Rape of Lucrece"
        },
        {
          "id": "g1506",
          "title": "The Two Noble Kinsmen"
        },
        {
          "id": "g1507",
          "title": "Titus Andronicus"
        },
        {
          "id": "g15071",
          "title": "La Tempête"
        },
        {
          "id": "g1508",
          "title": "The Taming of the Shrew"
        },
        {
          "id": "g1509",
          "title": "The Two Gentlemen of Verona"
        },
        {
          "id": "g1510",
          "title": "Love's Labour's Lost"
        },
        {
          "id": "g1511",
          "title": "King John"
        },
        {
          "id": "g1512",
          "title": "King Richard II"
        },
        {
          "id": "g1513",
          "title": "Romeo and Juliet"
        },
        {
          "id": "g1514",
          "title": "A Midsummer Night's Dream"
        },
        {
          "id": "g1515",
          "title": "The Merchant of Venice"
        },
        {
          "id": "g1516",
          "title": "King Henry IV, Part 1"
        },
        {
          "id": "g1517",
          "title": "The Merry Wives of Windsor"
        },
        {
          "id": "g1518",
          "title": "King Henry IV, Part 2"
        },
        {
          "id": "g1519",
          "title": "Much Ado about Nothing"
        },
        {
          "id": "g1520",
          "title": "Much Ado about Nothing"
        },
        {
          "id": "g1521",
          "title": "King Henry V"
        },
        {
          "id": "g1522",
          "title": "Julius Caesar"
        },
        {
          "id": "g1523",
          "title": "As You Like It"
        },
        {
          "id": "g1524",
          "title": "Hamlet"
        },
        {
          "id": "g1525",
          "title": "The Phoenix and the Turtle"
        },
        {
          "id": "g1526",
          "title": "Twelfth Night"
        },
        {
          "id": "g1527",
          "title": "Twelfth Night"
        },
        {
          "id": "g1528",
          "title": "Troilus and Cressida"
        },
        {
          "id": "g1529",
          "title": "All's Well That Ends Well"
        },
        {
          "id": "g1530",
          "title": "Measure for Measure"
        },
        {
          "id": "g15303",
          "title": "Coriolan"
        },
        {
          "id": "g1531",
          "title": "Othello"
        },
        {
          "id": "g1532",
          "title": "King Lear"
        },
        {
          "id": "g1533",
          "title": "Macbeth"
        },
        {
          "id": "g1534",
          "title": "Antony and Cleopatra"
        },
        {
          "id": "g1535",
          "title": "Coriolanus"
        },
        {
          "id": "g1536",
          "title": "Timon of Athens"
        },
        {
          "id": "g1537",
          "title": "Pericles, Prince of Tyre"
        },
        {
          "id": "g1538",
          "title": "Cymbeline"
        },
        {
          "id": "g1539",
          "title": "The Winter's Tale"
        },
        {
          "id": "g1540",
          "title": "The Tempest"
        },
        {
          "id": "g1541",
          "title": "King Henry VIII"
        },
        {
          "id": "g1543",
          "title": "A Lover's Complaint"
        },
        {
          "id": "g1544",
          "title": "The Passionate Pilgrim"
        },
        {
          "id": "g1545",
          "title": "Mucedorus"
        },
        {
          "id": "g1546",
          "title": "Sonnets on Sundry Notes of Music"
        },
        {
          "id": "g1547",
          "title": "Sir Thomas More"
        },
        {
          "id": "g1548",
          "title": "Locrine"
        },
        {
          "id": "g15632",
          "title": "Hamlet"
        },
        {
          "id": "g15643",
          "title": "Romeo ja Julia"
        },
        {
          "id": "g15846",
          "title": "Beaucoup de Bruit pour Rien"
        },
        {
          "id": "g15847",
          "title": "Jules César"
        }
      ],
      "total": 330,
      "hasMore": true,
      "cursor": "g15847"
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "query($a: ID!, $after: String) { books(authorId: $a, first: 50, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "a": "ga56",
    "after": "g15847"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g15848",
          "title": "La Comédie des Méprises"
        },
        {
          "id": "g15849",
          "title": "Timon d'Athènes"
        },
        {
          "id": "g15942",
          "title": "Antoine et Cléopâtre"
        },
... 195 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "g15848",
          "title": "La Comédie des Méprises"
        },
        {
          "id": "g15849",
          "title": "Timon d'Athènes"
        },
        {
          "id": "g15942",
          "title": "Antoine et Cléopâtre"
        },
        {
          "id": "g16128",
          "title": "Le Jour des Rois"
        },
        {
          "id": "g16490",
          "title": "Kuningas Lear"
        },
        {
          "id": "g16618",
          "title": "Antonius ja Cleopatra"
        },
        {
          "id": "g16710",
          "title": "Les Deux Gentilshommes de Vérone"
        },
        {
          "id": "g16893",
          "title": "Macbeth"
        },
        {
          "id": "g17046",
          "title": "Les alegres comares de Windsor"
        },
        {
          "id": "g1736",
          "title": "Thomas Lord Cromwell"
        },
        {
          "id": "g17529",
          "title": "Othello"
        },
        {
          "id": "g1765",
          "title": "King Henry VI, Part 1"
        },
        {
          "id": "g1768",
          "title": "King Richard III"
        },
        {
          "id": "g17686",
          "title": "Troilus ja Cressida"
        },
        {
          "id": "g1769",
          "title": "The Comedy of Errors"
        },
        {
          "id": "g1770",
          "title": "King Edward III"
        },
        {
          "id": "g1771",
          "title": "Titus Andronicus"
        },
        {
          "id": "g1772",
          "title": "The Taming of the Shrew"
        },
        {
          "id": "g1773",
          "title": "The Two Gentlemen of Verona"
        },
        {
          "id": "g1774",
          "title": "Love's Labour's Lost"
        },
        {
          "id": "g1775",
          "title": "King John"
        },
        {
          "id": "g1776",
          "title": "King Richard II"
        },
        {
          "id": "g1777",
          "title": "Romeo and Juliet"
        },
        {
          "id": "g1778",
          "title": "A Midsummer Night's Dream"
        },
        {
          "id": "g1779",
          "title": "The Merchant of Venice"
        },
        {
          "id": "g1780",
          "title": "King Henry IV, Part 1"
        },
        {
          "id": "g1781",
          "title": "The Merry Wives of Windsor"
        },
        {
          "id": "g1782",
          "title": "King Henry IV, Part 2"
        },
        {
          "id": "g1783",
          "title": "Much Ado About Nothing"
        },
        {
          "id": "g1784",
          "title": "King Henry V"
        },
        {
          "id": "g1785",
          "title": "Julius Caesar"
        },
        {
          "id": "g1786",
          "title": "As You Like It"
        },
        {
          "id": "g1787",
          "title": "Hamlet"
        },
        {
          "id": "g1788",
          "title": "Sir John Oldcastle"
        },
        {
          "id": "g1790",
          "title": "Troilus and Cressida"
        },
        {
          "id": "g1791",
          "title": "All's Well That Ends Well"
        },
        {
          "id": "g1792",
          "title": "Measure for Measure"
        },
        {
          "id": "g1793",
          "title": "Othello"
        },
        {
          "id": "g17930",
          "title": "Le songe d'une nuit d'été"
        },
        {
          "id": "g1794",
          "title": "King Lear"
        },
        {
          "id": "g1795",
          "title": "Macbeth"
        },
        {
          "id": "g1796",
          "title": "Antony and Cleopatra"
        },
        {
          "id": "g1797",
          "title": "Coriolanus"
        },
        {
          "id": "g1798",
          "title": "Timon of Athens"
        },
        {
          "id": "g1799",
          "title": "Cymbeline"
        },
        {
          "id": "g1800",
          "title": "The Winter's Tale"
        },
        {
          "id": "g1801",
          "title": "The Tempest"
        },
        {
          "id": "g1802",
          "title": "King Henry VIII"
        },
        {
          "id": "g18143",
          "title": "Roméo et Juliette: Tragédie"
        },
        {
          "id": "g18144",
          "title": "Timon Ateenalainen"
        }
      ],
      "total": 330,
      "hasMore": true,
      "cursor": "g18144"
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "query($a: ID!, $after: String) { books(authorId: $a, first: 50, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "a": "ga56",
    "after": "g18144"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g18162",
          "title": "Comme il vous plaira"
        },
        {
          "id": "g18169",
          "title": "Mesure pour mesure"
        },
        {
          "id": "g18179",
          "title": "Othello"
        },
... 195 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "g18162",
          "title": "Comme il vous plaira"
        },
        {
          "id": "g18169",
          "title": "Mesure pour mesure"
        },
        {
          "id": "g18179",
          "title": "Othello"
        },
        {
          "id": "g18311",
          "title": "Le conte d'hiver"
        },
        {
          "id": "g18312",
          "title": "Le roi Lear"
        },
        {
          "id": "g18313",
          "title": "Troïlus et Cressida"
        },
        {
          "id": "g18512",
          "title": "Julius Caesar"
        },
        {
          "id": "g19201",
          "title": "Cymbeline: Tragédie"
        },
        {
          "id": "g19219",
          "title": "La méchante femme mise à la raison: Comédie"
        },
        {
          "id": "g19227",
          "title": "Peines d'amour perdues: Comédie"
        },
        {
          "id": "g19228",
          "title": "Périclès: Tragédie"
        },
        {
          "id": "g20188",
          "title": "Coriolanus"
        },
        {
          "id": "g20720",
          "title": "Les joyeuses Bourgeoises de Windsor"
        },
        {
          "id": "g20773",
          "title": "Le marchand de Venise"
        },
        {
          "id": "g21100",
          "title": "Titus Andronicus"
        },
        {
          "id": "g21277",
          "title": "La vie et la mort du roi Richard II"
        },
        {
          "id": "g21856",
          "title": "Le roi Jean"
        },
        {
          "id": "g22045",
          "title": "La festa dels reis: Lo que vulgueu"
        },
        {
          "id": "g2235",
          "title": "The Tempest"
        },
        {
          "id": "g2236",
          "title": "The Two Gentlemen of Verona"
        },
        {
          "id": "g2237",
          "title": "The Merry Wives of Windsor"
        },
        {
          "id": "g2238",
          "title": "Measure for Measure"
        },
        {
          "id": "g2239",
          "title": "The Comedy of Errors"
        },
        {
          "id": "g2240",
          "title": "Much Ado about Nothing"
        },
        {
          "id": "g2241",
          "title": "Love's Labour's Lost"
        },
        {
          "id": "g2242",
          "title": "A Midsummer Night's Dream"
        },
        {
          "id": "g2243",
          "title": "The Merchant of Venice"
        },
        {
          "id": "g2244",
          "title": "As You Like It"
        },
        {
          "id": "g2245",
          "title": "The Taming of the Shrew"
        },
        {
          "id": "g2246",
          "title": "All's Well That Ends Well"
        },
        {
          "id": "g2247",
          "title": "Twelfth Night"
        },
        {
          "id": "g2248",
          "title": "The Winter's Tale"
        },
        {
          "id": "g2249",
          "title": "King John"
        },
        {
          "id": "g2250",
          "title": "King Richard II"
        },
        {
          "id": "g2251",
          "title": "King Henry IV, Part 1"
        },
        {
          "id": "g2252",
          "title": "King Henry IV, Part 2"
        },
        {
          "id": "g2253",
          "title": "King Henry V"
        },
        {
          "id": "g2254",
          "title": "King Henry VI, Part 1"
        },
        {
          "id": "g2255",
          "title": "King Henry VI, Part 2"
        },
        {
          "id": "g22556",
          "title": "Cymbeline"
        },
        {
          "id": "g2256",
          "title": "King Henry VI, Part 3"
        },
        {
          "id": "g2257",
          "title": "King Richard III"
        },
        {
          "id": "g2258",
          "title": "King Henry VIII"
        },
        {
          "id": "g2259",
          "title": "Coriolanus"
        },
        {
          "id": "g2260",
          "title": "Titus Andronicus"
        },
        {
          "id": "g2261",
          "title": "Romeo and Juliet"
        },
        {
          "id": "g2262",
          "title": "Timon of Athens"
        },
        {
          "id": "g2263",
          "title": "Julius Caesar"
        },
        {
          "id": "g2264",
          "title": "Macbeth"
        },
        {
          "id": "g2265",
          "title": "Hamlet"
        }
      ],
      "total": 330,
      "hasMore": true,
      "cursor": "g2265"
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "query($a: ID!, $after: String) { books(authorId: $a, first: 50, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "a": "ga56",
    "after": "g2265"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g2266",
          "title": "King Lear"
        },
        {
          "id": "g2267",
          "title": "Othello"
        },
        {
          "id": "g2268",
          "title": "Antony and Cleopatra"
        },
... 195 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "g2266",
          "title": "King Lear"
        },
        {
          "id": "g2267",
          "title": "Othello"
        },
        {
          "id": "g2268",
          "title": "Antony and Cleopatra"
        },
        {
          "id": "g2269",
          "title": "Cymbeline"
        },
        {
          "id": "g2270",
          "title": "Shakespeare's First Folio"
        },
        {
          "id": "g22760",
          "title": "Henri IV (1re partie)"
        },
        {
          "id": "g22791",
          "title": "King Henry V: Arranged for Representation at the Princess's Theatre"
        },
        {
          "id": "g23041",
          "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 1 of 9]: Introduction and Publisher's Advertising"
        },
        {
          "id": "g23042",
          "title": "The Tempest: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"
        },
        {
          "id": "g23043",
          "title": "Two Gentlemen of Verona: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"
        },
        {
          "id": "g23044",
          "title": "The Merry Wives of Windsor: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"
        },
        {
          "id": "g23045",
          "title": "Measure for Measure: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"
        },
        {
          "id": "g23046",
          "title": "The Comedy of Errors: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"
        },
        {
          "id": "g23676",
          "title": "Titus Andronicus"
        },
        {
          "id": "g25667",
          "title": "Hamlet: Drama em cinco Actos"
        },
        {
          "id": "g25694",
          "title": "Venus et Adonis"
        },
        {
          "id": "g25707",
          "title": "Titus Andronicus"
        },
        {
          "id": "g25715",
          "title": "Henri IV (2e partie)"
        },
        {
          "id": "g25843",
          "title": "De Klucht der Vergissingen"
        },
        {
          "id": "g26169",
          "title": "La Tempesta"
        },
        {
          "id": "g26594",
          "title": "Twee Edellieden van Verona"
        },
        {
          "id": "g26757",
          "title": "La mort de Lucrèce"
        },
        {
          "id": "g26758",
          "title": "La plainte d'une amante"
        },
        {
          "id": "g26759",
          "title": "La vie et la mort du roi Richard III"
        },
        {
          "id": "g26762",
          "title": "Henri V"
        },
        {
          "id": "g26763",
          "title": "Henri VI (1/3)"
        },
        {
          "id": "g26764",
          "title": "Henri VI (2/3)"
        },
        {
          "id": "g26765",
          "title": "Henri VI (3/3)"
        },
        {
          "id": "g26766",
          "title": "Henri VIII"
        },
        {
          "id": "g27062",
          "title": "Romeo i Julia: Tragedya w 5 Aktach"
        },
        {
          "id": "g27191",
          "title": "Sonnets. Volume 8"
        },
        {
          "id": "g27536",
          "title": "El Marxant de Venecia"
        },
        {
          "id": "g27708",
          "title": "Loppiaisaatto eli Miten mielitte"
        },
        {
          "id": "g27761",
          "title": "Hamlet"
        },
        {
          "id": "g28150",
          "title": "Le Pèlerin amoureux"
        },
        {
          "id": "g28151",
          "title": "Tout est bien qui finit bien"
        },
        {
          "id": "g28334",
          "title": "The New Hudson Shakespeare: Julius Cæsar"
        },
        {
          "id": "g28965",
          "title": "Kuningas Juhana"
        },
        {
          "id": "g29359",
          "title": "De Koopman van Venetië: Drama in vijf bedrijven"
        },
        {
          "id": "g30790",
          "title": "Kuningas Richard Toinen"
        },
        {
          "id": "g31126",
          "title": "Een Midzomernachtdroom"
        },
        {
          "id": "g31405",
          "title": "Η τρικυμία"
        },
        {
          "id": "g31797",
          "title": "Αμλέτος"
        },
        {
          "id": "g31808",
          "title": "Σαικσπείρου Τραγωδίαι : Μέρος Α'. Ρωμαίος και Ιουλιέτα"
        },
        {
          "id": "g32305",
          "title": "Σαικσπήρου Δράματα, Ο Βασιλιάς Ληρ"
        },
        {
          "id": "g32797",
          "title": "Οθέλλος: Σαικσπείρου Τραγωδίαι Μέρος Β'"
        },
        {
          "id": "g33961",
          "title": "Αντώνιος και Κλεοπάτρα: Τραγωδία εις πράξεις 5"
        },
        {
          "id": "g34434",
          "title": "Μάκβεθ"
        },
        {
          "id": "g37279",
          "title": "Hamleto, Reĝido de Danujo"
        },
        {
          "id": "g37835",
          "title": "Kuningas Richard Kolmas"
        }
      ],
      "total": 330,
      "hasMore": true,
      "cursor": "g37835"
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "query($a: ID!, $after: String) { books(authorId: $a, first: 50, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "a": "ga56",
    "after": "g37835"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g38901",
          "title": "Twelfth Night"
        },
        {
          "id": "g39557",
          "title": "Kuningas Henrik Neljäs I"
        },
        {
          "id": "g39636",
          "title": "Kuningas Henrik Neljäs II"
        },
... 195 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "g38901",
          "title": "Twelfth Night"
        },
        {
          "id": "g39557",
          "title": "Kuningas Henrik Neljäs I"
        },
        {
          "id": "g39636",
          "title": "Kuningas Henrik Neljäs II"
        },
        {
          "id": "g39939",
          "title": "Kuningas Henrik Viides"
        },
        {
          "id": "g40070",
          "title": "Kuningas Henrik Kuudes I"
        },
        {
          "id": "g40115",
          "title": "Kuningas Henrik Kuudes II"
        },
        {
          "id": "g40174",
          "title": "Kuningas Henrik Kuudes III"
        },
        {
          "id": "g4031",
          "title": "The London Prodigal"
        },
        {
          "id": "g4214",
          "title": "The Puritan Widow"
        },
        {
          "id": "g4255",
          "title": "A Yorkshire Tragedy"
        },
        {
          "id": "g42873",
          "title": "Kuningas Henrik Kahdeksas"
        },
        {
          "id": "g42898",
          "title": "Paljo melua tyhjästä"
        },
        {
          "id": "g42966",
          "title": "Kuinka äkäpussi kesytetään"
        },
        {
          "id": "g43440",
          "title": "Arden of Feversham"
        },
        {
          "id": "g43532",
          "title": "Miten haluatte"
        },
        {
          "id": "g44158",
          "title": "Hairauksia"
        },
        {
          "id": "g44580",
          "title": "Loppu hyvä, kaikki hyvä"
        },
        {
          "id": "g44602",
          "title": "Turhaa lemmen touhua"
        },
        {
          "id": "g44825",
          "title": "Verta verrasta"
        },
        {
          "id": "g44826",
          "title": "Iloiset Windsorin rouvat"
        },
        {
          "id": "g44831",
          "title": "Kesäyön unelma"
        },
        {
          "id": "g44832",
          "title": "Venetian kauppias"
        },
        {
          "id": "g44839",
          "title": "Kaksi nuorta veronalaista"
        },
        {
          "id": "g44840",
          "title": "Talvinen tarina"
        },
        {
          "id": "g44845",
          "title": "Myrsky"
        },
        {
          "id": "g45128",
          "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 2 of 9]"
        },
        {
          "id": "g46768",
          "title": "Julius Cæsar"
        },
        {
          "id": "g47518",
          "title": "The Tempest"
        },
        {
          "id": "g47715",
          "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 7 of 9]"
        },
        {
          "id": "g4774",
          "title": "The Merry Devil of Edmonton"
        },
        {
          "id": "g47913",
          "title": "Makbeto"
        },
        {
          "id": "g47960",
          "title": "Romeo and Juliet"
        },
        {
          "id": "g48386",
          "title": "Veel Gemin, geen Gewin"
        },
        {
          "id": "g49007",
          "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 6 of 9]"
        },
        {
          "id": "g49008",
          "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 8 of 9]"
        },
        {
          "id": "g49297",
          "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 5 of 9]"
        },
        {
          "id": "g49880",
          "title": "Romeo en Julia"
        },
        {
          "id": "g50095",
          "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 4 of 9]"
        },
        {
          "id": "g50559",
          "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 3 of 9]"
        },
        {
          "id": "g51138",
          "title": "De Koopman van Venetië"
        },
        {
          "id": "g5137",
          "title": "Fair Em"
        },
        {
          "id": "g51691",
          "title": "De getemde feeks"
        },
        {
          "id": "g53207",
          "title": "Dramas de Guillermo Shakspeare [vol. 1]"
        },
        {
          "id": "g55662",
          "title": "Koning Jan"
        },
        {
          "id": "g56454",
          "title": "Hamlet: Drama en cinco actos"
        },
        {
          "id": "g56851",
          "title": "Shakspeare's Mental Photographs"
        },
        {
          "id": "g59686",
          "title": "Dramas de Guillermo Shakspeare [vol. 4]"
        },
        {
          "id": "g61103",
          "title": "Kiel plaĉas al vi: komedio en kvin aktoj"
        },
        {
          "id": "g63367",
          "title": "Koning Hendrik de Vierde"
        },
        {
          "id": "g63368",
          "title": "Koning Richard de Tweede"
        }
      ],
      "total": 330,
      "hasMore": true,
      "cursor": "g63368"
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "query($a: ID!, $after: String) { books(authorId: $a, first: 50, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "a": "ga56",
    "after": "g63368"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g64102",
          "title": "Flowers from Shakespeare's Garden: A Posy from the Plays"
        },
        {
          "id": "g67635",
          "title": "Koning Hendrik de Vijfde"
        },
        {
          "id": "g6924",
          "title": "Richard III"
        },
... 115 more lines
Full response body
{
  "data": {
    "books": {
      "items": [
        {
          "id": "g64102",
          "title": "Flowers from Shakespeare's Garden: A Posy from the Plays"
        },
        {
          "id": "g67635",
          "title": "Koning Hendrik de Vijfde"
        },
        {
          "id": "g6924",
          "title": "Richard III"
        },
        {
          "id": "g6975",
          "title": "Macbeth"
        },
        {
          "id": "g6990",
          "title": "Coriolanus"
        },
        {
          "id": "g6996",
          "title": "Romeo und Julia"
        },
        {
          "id": "g7022",
          "title": "Ein Sommernachtstraum"
        },
        {
          "id": "g7041",
          "title": "Wie es Euch gefällt"
        },
        {
          "id": "g7043",
          "title": "Der Kaufmann von Venedig"
        },
        {
          "id": "g71836",
          "title": "La ventego de Shakespeare"
        },
        {
          "id": "g7185",
          "title": "Othello"
        },
        {
          "id": "g7186",
          "title": "Was ihr wollt"
        },
        {
          "id": "g7225",
          "title": "Die Irrungen, oder die Doppelten Zwillinge"
        },
        {
          "id": "g7226",
          "title": "Timon von Athen"
        },
        {
          "id": "g7232",
          "title": "Romeo und Juliette"
        },
        {
          "id": "g7233",
          "title": "Maaß für Maaß: Wie einer mißt, so wird ihm wieder gemessen"
        },
        {
          "id": "g7236",
          "title": "Der Sturm, oder Die bezauberte Insel"
        },
        {
          "id": "g7240",
          "title": "Das Leben und der Tod des Königs Lear"
        },
        {
          "id": "g7264",
          "title": "Ein St.-Johannis-Nachts-Traum"
        },
        {
          "id": "g7269",
          "title": "Macbeth"
        },
        {
          "id": "g7276",
          "title": "Hamlet, Prinz von Dännemark"
        },
        {
          "id": "g7292",
          "title": "Leben und Tod des Königs Johann"
        },
        {
          "id": "g7323",
          "title": "Leben und Tod Königs Richard des zweyten"
        },
        {
          "id": "g75268",
          "title": "Koning Hendrik de Zesde"
        },
        {
          "id": "g76912",
          "title": "Koning Richard de Derde"
        },
        {
          "id": "g76946",
          "title": "De vroolijke vrouwtjes van Windsor"
        },
        {
          "id": "g7933",
          "title": "König Heinrich der vierte. Der Erste Theil"
        },
        {
          "id": "g7934",
          "title": "König Heinrich der vierte. Der Zweyte Theil, der seinen Tod, und die Crönung von Heinrich dem fünften enthält."
        },
        {
          "id": "g9077",
          "title": "Hamlet: The First ('Bad') Quarto"
        },
        {
          "id": "g9875",
          "title": "Julius Caesar"
        }
      ],
      "total": 330,
      "hasMore": false,
      "cursor": "g9875"
    }
  }
}

Rayfold 22 requests

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga43"
        },
        "page": {
          "first": 50
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
... 2 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g102",
        "title": "The Tragedy of Pudd'nhead Wilson"
      },
      {
        "id": "g1044",
        "title": "Extract from Captain Stormfield's Visit to Heaven"
      },
      {
        "id": "g1086",
        "title": "A Horse's Tale"
      },
... 195 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga43"
        },
        "page": {
          "first": 50
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g102",
        "title": "The Tragedy of Pudd'nhead Wilson"
      },
      {
        "id": "g1044",
        "title": "Extract from Captain Stormfield's Visit to Heaven"
      },
      {
        "id": "g1086",
        "title": "A Horse's Tale"
      },
      {
        "id": "g11622",
        "title": "Plus fort que Sherlock Holmès"
      },
      {
        "id": "g119",
        "title": "A Tramp Abroad"
      },
      {
        "id": "g1213",
        "title": "The Man That Corrupted Hadleyburg"
      },
      {
        "id": "g142",
        "title": "The $30,000 Bequest, and Other Stories"
      },
      {
        "id": "g17945",
        "title": "Mark Twain: Tri Noveloj"
      },
      {
        "id": "g1837",
        "title": "The Prince and the Pauper"
      },
      {
        "id": "g18381",
        "title": "De Lotgevallen van Tom Sawyer"
      },
      {
        "id": "g1892",
        "title": "Extracts from Adam's Diary, translated from the original ms."
      },
      {
        "id": "g19484",
        "title": "Editorial Wild Oats"
      },
      {
        "id": "g19987",
        "title": "Chapters from My Autobiography"
      },
      {
        "id": "g20943",
        "title": "Mark Twain: Tri Ceteraj Noveloj"
      },
      {
        "id": "g2431",
        "title": "Is Shakespeare Dead?: From My Autobiography"
      },
      {
        "id": "g245",
        "title": "Life on the Mississippi"
      },
      {
        "id": "g2572",
        "title": "On the Decay of the Art of Lying"
      },
      {
        "id": "g2874",
        "title": "Personal Recollections of Joan of Arc — Volume 1"
      },
      {
        "id": "g2875",
        "title": "Personal Recollections of Joan of Arc — Volume 2"
      },
      {
        "id": "g28803",
        "title": "The Works of Mark Twain: An Index of all Project Gutenberg Editions"
      },
      {
        "id": "g2895",
        "title": "Following the Equator: A Journey Around the World"
      },
      {
        "id": "g30165",
        "title": "Die Abenteuer Tom Sawyers"
      },
      {
        "id": "g30890",
        "title": "Les Aventures De Tom Sawyer"
      },
      {
        "id": "g3171",
        "title": "In Defence of Harriet Shelley"
      },
      {
        "id": "g3172",
        "title": "Fenimore Cooper's Literary Offences"
      },
      {
        "id": "g3173",
        "title": "Essays on Paul Bourget"
      },
      {
        "id": "g3174",
        "title": "A Dog's Tale"
      },
      {
        "id": "g3175",
        "title": "Mark Twain's Burlesque Autobiography"
      },
      {
        "id": "g3176",
        "title": "The Innocents Abroad"
      },
      {
        "id": "g3177",
        "title": "Roughing It"
      },
      {
        "id": "g3178",
        "title": "The Gilded Age: A Tale of Today"
      },
      {
        "id": "g3179",
        "title": "The American Claimant"
      },
      {
        "id": "g3180",
        "title": "A Double Barrelled Detective Story"
      },
      {
        "id": "g3181",
        "title": "The Stolen White Elephant"
      },
      {
        "id": "g3182",
        "title": "Some Rambling Notes of an Idle Excursion"
      },
      {
        "id": "g3183",
        "title": "The Facts Concerning the Recent Carnival of Crime in Connecticut"
      },
      {
        "id": "g3184",
        "title": "Alonzo Fitz, and Other Stories"
      },
      {
        "id": "g3185",
        "title": "Those Extraordinary Twins"
      },
      {
        "id": "g3186",
        "title": "The Mysterious Stranger, and Other Stories"
      },
      {
        "id": "g3187",
        "title": "Christian Science"
      },
      {
        "id": "g3188",
        "title": "Mark Twain's Speeches"
      },
      {
        "id": "g3189",
        "title": "Sketches New and Old"
      },
      {
        "id": "g3190",
        "title": "1601: Conversation as it was by the Social Fireside in the Time of the Tudors"
      },
      {
        "id": "g3191",
        "title": "Goldsmith's Friend Abroad Again"
      },
      {
        "id": "g3192",
        "title": "The Curious Republic of Gondour, and Other Whimsical Sketches"
      },
      {
        "id": "g3193",
        "title": "Mark Twain's Letters — Volume 1 (1853-1866)"
      },
      {
        "id": "g3194",
        "title": "Mark Twain's Letters — Volume 2 (1867-1875)"
      },
      {
        "id": "g3195",
        "title": "Mark Twain's Letters — Volume 3 (1876-1885)"
      },
      {
        "id": "g3196",
        "title": "Mark Twain's Letters — Volume 4 (1886-1900)"
      },
      {
        "id": "g3197",
        "title": "Mark Twain's Letters — Volume 5 (1901-1906)"
      }
    ],
    "total": 196,
    "hasMore": true,
    "cursor": "g3197"
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga43"
        },
        "page": {
          "first": 50,
          "after": "g3197"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g3198",
        "title": "Mark Twain's Letters — Volume 6 (1907-1910)"
      },
      {
        "id": "g3199",
        "title": "Mark Twain's Letters — Complete (1853-1910)"
      },
      {
        "id": "g3200",
        "title": "The Entire Project Gutenberg Works of Mark Twain"
      },
... 195 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga43"
        },
        "page": {
          "first": 50,
          "after": "g3197"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g3198",
        "title": "Mark Twain's Letters — Volume 6 (1907-1910)"
      },
      {
        "id": "g3199",
        "title": "Mark Twain's Letters — Complete (1853-1910)"
      },
      {
        "id": "g3200",
        "title": "The Entire Project Gutenberg Works of Mark Twain"
      },
      {
        "id": "g32325",
        "title": "The Adventures of Huckleberry Finn (Tom Sawyer's Comrade)"
      },
      {
        "id": "g3250",
        "title": "How to Tell a Story, and Other Essays"
      },
      {
        "id": "g3251",
        "title": "The Man That Corrupted Hadleyburg, and Other Stories"
      },
      {
        "id": "g33077",
        "title": "The Treaty With China, its Provisions Explained: New York Tribune, Tuesday, August 28, 1868"
      },
      {
        "id": "g3432",
        "title": "Quotations from the Project Gutenberg Editions of the Works of Mark Twain"
      },
      {
        "id": "g45333",
        "title": "Tom Sawyer: Koulupojan historia"
      },
      {
        "id": "g47095",
        "title": "Huckleberry Finnin (Tom Sawyerin toverin) seikkailut"
      },
      {
        "id": "g47257",
        "title": "Prinssi ja kerjäläispoika"
      },
      {
        "id": "g47410",
        "title": "Tom Sawyer salapoliisina: Huck Finnin kertomus"
      },
      {
        "id": "g47411",
        "title": "Tom Sawyer ilmailija: Huckleberry Finn'in jatko"
      },
      {
        "id": "g48397",
        "title": "Luotsina Mississippi-joella: Humoristinen kertomus"
      },
      {
        "id": "g48412",
        "title": "Johanna d'Arc: Kertomus hänen elämästään ja marttyrikuolemastaan"
      },
      {
        "id": "g48415",
        "title": "Jenkkejä maailmalla I: Heidän toivioretkensä Pyhälle Maalle"
      },
      {
        "id": "g48416",
        "title": "Jenkkejä maailmalla II: Heidän toivioretkensä Pyhälle Maalle"
      },
      {
        "id": "g50109",
        "title": "The Mysterious Stranger: A Romance"
      },
      {
        "id": "g51795",
        "title": "Taivasko vai helvetti y.m. humoreskeja"
      },
      {
        "id": "g53301",
        "title": "Nimensä pilannut kaupunki"
      },
      {
        "id": "g5688",
        "title": "The Innocents Abroad — Volume 01"
      },
      {
        "id": "g5689",
        "title": "The Innocents Abroad — Volume 02"
      },
      {
        "id": "g5690",
        "title": "The Innocents Abroad — Volume 03"
      },
      {
        "id": "g5691",
        "title": "The Innocents Abroad — Volume 04"
      },
      {
        "id": "g5692",
        "title": "The Innocents Abroad — Volume 05"
      },
      {
        "id": "g5693",
        "title": "The Innocents Abroad — Volume 06"
      },
      {
        "id": "g5782",
        "title": "A Tramp Abroad — Volume 01"
      },
      {
        "id": "g5783",
        "title": "A Tramp Abroad — Volume 02"
      },
      {
        "id": "g5784",
        "title": "A Tramp Abroad — Volume 03"
      },
      {
        "id": "g5785",
        "title": "A Tramp Abroad — Volume 04"
      },
      {
        "id": "g5786",
        "title": "A Tramp Abroad — Volume 05"
      },
      {
        "id": "g5787",
        "title": "A Tramp Abroad — Volume 06"
      },
      {
        "id": "g5788",
        "title": "A Tramp Abroad — Volume 07"
      },
      {
        "id": "g5808",
        "title": "Following the Equator: A Journey Around the World. Part 1"
      },
      {
        "id": "g5809",
        "title": "Following the Equator: A Journey Around the World. Part 2"
      },
      {
        "id": "g5810",
        "title": "Following the Equator: A Journey Around the World. Part 3"
      },
      {
        "id": "g5811",
        "title": "Following the Equator: A Journey Around the World. Part 4"
      },
      {
        "id": "g5812",
        "title": "Following the Equator: A Journey Around the World. Part 5"
      },
      {
        "id": "g5813",
        "title": "Following the Equator: A Journey Around the World. Part 6"
      },
      {
        "id": "g5814",
        "title": "Following the Equator: A Journey Around the World. Part 7"
      },
      {
        "id": "g5818",
        "title": "The Gilded Age, Part 1."
      },
      {
        "id": "g5819",
        "title": "The Gilded Age, Part 2."
      },
      {
        "id": "g5820",
        "title": "The Gilded Age, Part 3."
      },
      {
        "id": "g5821",
        "title": "The Gilded Age, Part 4."
      },
      {
        "id": "g5822",
        "title": "The Gilded Age, Part 5."
      },
      {
        "id": "g5823",
        "title": "The Gilded Age, Part 6."
      },
      {
        "id": "g5824",
        "title": "The Gilded Age, Part 7."
      },
      {
        "id": "g5836",
        "title": "Sketches New and Old, Part 1."
      },
      {
        "id": "g5837",
        "title": "Sketches New and Old, Part 2."
      },
      {
        "id": "g5838",
        "title": "Sketches New and Old, Part 3."
      }
    ],
    "total": 196,
    "hasMore": true,
    "cursor": "g5838"
  },
  "fin": true
}
20 more requests
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga43"
        },
        "page": {
          "first": 50,
          "after": "g5838"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g5839",
        "title": "Sketches New and Old, Part 4."
      },
      {
        "id": "g5840",
        "title": "Sketches New and Old, Part 5."
      },
      {
        "id": "g5841",
        "title": "Sketches New and Old, Part 6."
      },
... 195 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga43"
        },
        "page": {
          "first": 50,
          "after": "g5838"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g5839",
        "title": "Sketches New and Old, Part 4."
      },
      {
        "id": "g5840",
        "title": "Sketches New and Old, Part 5."
      },
      {
        "id": "g5841",
        "title": "Sketches New and Old, Part 6."
      },
      {
        "id": "g5842",
        "title": "Sketches New and Old, Part 7."
      },
      {
        "id": "g60900",
        "title": "Merry Tales"
      },
      {
        "id": "g61338",
        "title": "Moments with Mark Twain"
      },
      {
        "id": "g61522",
        "title": "The £1,000,000 bank-note, and other new stories"
      },
      {
        "id": "g61644",
        "title": "Salapoliisijuttu sekin y.m. kertomuksia"
      },
      {
        "id": "g62636",
        "title": "To the Person Sitting in Darkness"
      },
      {
        "id": "g62739",
        "title": "King Leopold's Soliloquy: A Defense of His Congo Rule"
      },
      {
        "id": "g64417",
        "title": "Tom Sawyers Abenteuer und Streiche"
      },
      {
        "id": "g64482",
        "title": "Abenteuer und Fahrten des Huckleberry Finn"
      },
      {
        "id": "g64718",
        "title": "Skizzenbuch"
      },
      {
        "id": "g64869",
        "title": "Auf dem Mississippi; Nach dem fernen Westen"
      },
      {
        "id": "g65089",
        "title": "Im Gold- und Silberland"
      },
      {
        "id": "g65212",
        "title": "Reisebilder und verschiedene Skizzen"
      },
      {
        "id": "g65346",
        "title": "Tom Sawyers Neue Abenteuer"
      },
      {
        "id": "g65648",
        "title": "Querkopf Wilson"
      },
      {
        "id": "g66159",
        "title": "Huckleberry Finn kalandjai"
      },
      {
        "id": "g66437",
        "title": "Meine Reise um die Welt. Erste Abteilung"
      },
      {
        "id": "g66673",
        "title": "Meine Reise um die Welt. Zweite Abteilung"
      },
      {
        "id": "g66904",
        "title": "Adams Tagebuch, und andere Erzählungen"
      },
      {
        "id": "g66952",
        "title": "Wie Hadleyburg verderbt wurde: Nebst anderen Erzählungen"
      },
      {
        "id": "g68604",
        "title": "Europe and elsewhere"
      },
      {
        "id": "g70",
        "title": "What Is Man? and Other Essays"
      },
      {
        "id": "g70778",
        "title": "Un pari de milliardaires et autres nouvelles"
      },
      {
        "id": "g7100",
        "title": "Adventures of Huckleberry Finn, Chapters 01 to 05"
      },
      {
        "id": "g7101",
        "title": "Adventures of Huckleberry Finn, Chapters 06 to 10"
      },
      {
        "id": "g7102",
        "title": "Adventures of Huckleberry Finn, Chapters 11 to 15"
      },
      {
        "id": "g7103",
        "title": "Adventures of Huckleberry Finn, Chapters 16 to 20"
      },
      {
        "id": "g7104",
        "title": "Adventures of Huckleberry Finn, Chapters 21 to 25"
      },
      {
        "id": "g7105",
        "title": "Adventures of Huckleberry Finn, Chapters 26 to 30"
      },
      {
        "id": "g7106",
        "title": "Adventures of Huckleberry Finn, Chapters 31 to 35"
      },
      {
        "id": "g7107",
        "title": "Adventures of Huckleberry Finn, Chapters 36 to the Last"
      },
      {
        "id": "g7154",
        "title": "The Prince and the Pauper, Part 1."
      },
      {
        "id": "g7155",
        "title": "The Prince and the Pauper, Part 2."
      },
      {
        "id": "g7156",
        "title": "The Prince and the Pauper, Part 3."
      },
      {
        "id": "g7157",
        "title": "The Prince and the Pauper, Part 4."
      },
      {
        "id": "g7158",
        "title": "The Prince and the Pauper, Part 5."
      },
      {
        "id": "g7159",
        "title": "The Prince and the Pauper, Part 6."
      },
      {
        "id": "g7160",
        "title": "The Prince and the Pauper, Part 7."
      },
      {
        "id": "g7161",
        "title": "The Prince and the Pauper, Part 8."
      },
      {
        "id": "g7162",
        "title": "The Prince and the Pauper, Part 9."
      },
      {
        "id": "g71715",
        "title": "Le Legs de 30.000 dollars et autres contes"
      },
      {
        "id": "g71901",
        "title": "Contes choisis"
      },
      {
        "id": "g7193",
        "title": "The Adventures of Tom Sawyer, Part 1."
      },
      {
        "id": "g7194",
        "title": "The Adventures of Tom Sawyer, Part 2."
      },
      {
        "id": "g7195",
        "title": "The Adventures of Tom Sawyer, Part 3."
      },
      {
        "id": "g7196",
        "title": "The Adventures of Tom Sawyer, Part 4."
      },
      {
        "id": "g7197",
        "title": "The Adventures of Tom Sawyer, Part 5."
      }
    ],
    "total": 196,
    "hasMore": true,
    "cursor": "g7197"
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga43"
        },
        "page": {
          "first": 50,
          "after": "g7197"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g7198",
        "title": "The Adventures of Tom Sawyer, Part 6."
      },
      {
        "id": "g7199",
        "title": "The Adventures of Tom Sawyer, Part 7."
      },
      {
        "id": "g7200",
        "title": "The Adventures of Tom Sawyer, Part 8."
      },
... 179 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga43"
        },
        "page": {
          "first": 50,
          "after": "g7197"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g7198",
        "title": "The Adventures of Tom Sawyer, Part 6."
      },
      {
        "id": "g7199",
        "title": "The Adventures of Tom Sawyer, Part 7."
      },
      {
        "id": "g7200",
        "title": "The Adventures of Tom Sawyer, Part 8."
      },
      {
        "id": "g7242",
        "title": "A Connecticut Yankee in King Arthur's Court, Part 1."
      },
      {
        "id": "g7243",
        "title": "A Connecticut Yankee in King Arthur's Court, Part 2."
      },
      {
        "id": "g7244",
        "title": "A Connecticut Yankee in King Arthur's Court, Part 3."
      },
      {
        "id": "g7245",
        "title": "A Connecticut Yankee in King Arthur's Court, Part 4."
      },
      {
        "id": "g7246",
        "title": "A Connecticut Yankee in King Arthur's Court, Part 5."
      },
      {
        "id": "g7247",
        "title": "A Connecticut Yankee in King Arthur's Court, Part 6."
      },
      {
        "id": "g7248",
        "title": "A Connecticut Yankee in King Arthur's Court, Part 7."
      },
      {
        "id": "g72486",
        "title": "Les Peterkins"
      },
      {
        "id": "g7249",
        "title": "A Connecticut Yankee in King Arthur's Court, Part 8."
      },
      {
        "id": "g7250",
        "title": "A Connecticut Yankee in King Arthur's Court, Part 9."
      },
      {
        "id": "g72726",
        "title": "Le prétendant américain"
      },
      {
        "id": "g74",
        "title": "The Adventures of Tom Sawyer, Complete"
      },
      {
        "id": "g75104",
        "title": "Amerikkalaisia kaskuja"
      },
      {
        "id": "g7556",
        "title": "Quotes and Images From The Works of Mark Twain"
      },
      {
        "id": "g76",
        "title": "Adventures of Huckleberry Finn"
      },
      {
        "id": "g78786",
        "title": "Le cochon dans les trèfles"
      },
      {
        "id": "g8471",
        "title": "Life on the Mississippi, Part 1."
      },
      {
        "id": "g8472",
        "title": "Life on the Mississippi, Part 2."
      },
      {
        "id": "g8473",
        "title": "Life on the Mississippi, Part 3."
      },
      {
        "id": "g8474",
        "title": "Life on the Mississippi, Part 4."
      },
      {
        "id": "g8475",
        "title": "Life on the Mississippi, Part 5."
      },
      {
        "id": "g8476",
        "title": "Life on the Mississippi, Part 6."
      },
      {
        "id": "g8477",
        "title": "Life on the Mississippi, Part 7."
      },
      {
        "id": "g8478",
        "title": "Life on the Mississippi, Part 8."
      },
      {
        "id": "g8479",
        "title": "Life on the Mississippi, Part 9."
      },
      {
        "id": "g8480",
        "title": "Life on the Mississippi, Part 10."
      },
      {
        "id": "g8481",
        "title": "Life on the Mississippi, Part 11."
      },
      {
        "id": "g8482",
        "title": "Life on the Mississippi, Part 12."
      },
      {
        "id": "g8525",
        "title": "Eve's Diary, Complete"
      },
      {
        "id": "g8526",
        "title": "Eve's Diary, Part 1"
      },
      {
        "id": "g8527",
        "title": "Eve's Diary, Part 2"
      },
      {
        "id": "g8528",
        "title": "Eve's Diary, Part 3"
      },
      {
        "id": "g8582",
        "title": "Roughing It, Part 1."
      },
      {
        "id": "g8583",
        "title": "Roughing It, Part 2."
      },
      {
        "id": "g8584",
        "title": "Roughing It, Part 3."
      },
      {
        "id": "g8585",
        "title": "Roughing It, Part 4."
      },
      {
        "id": "g8586",
        "title": "Roughing It, Part 5."
      },
      {
        "id": "g8587",
        "title": "Roughing It, Part 6."
      },
      {
        "id": "g8588",
        "title": "Roughing It, Part 7."
      },
      {
        "id": "g8589",
        "title": "Roughing It, Part 8."
      },
      {
        "id": "g86",
        "title": "A Connecticut Yankee in King Arthur's Court"
      },
      {
        "id": "g91",
        "title": "Tom Sawyer Abroad"
      },
      {
        "id": "g93",
        "title": "Tom Sawyer, Detective"
      }
    ],
    "total": 196,
    "hasMore": false,
    "cursor": "g93"
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
... 2 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g100",
        "title": "The Complete Works of William Shakespeare"
      },
      {
        "id": "g1041",
        "title": "Shakespeare's Sonnets"
      },
      {
        "id": "g1045",
        "title": "Venus and Adonis"
      },
... 195 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g100",
        "title": "The Complete Works of William Shakespeare"
      },
      {
        "id": "g1041",
        "title": "Shakespeare's Sonnets"
      },
      {
        "id": "g1045",
        "title": "Venus and Adonis"
      },
      {
        "id": "g10606",
        "title": "Hamlet: A Study with the Text of the Folio of 1623"
      },
      {
        "id": "g1100",
        "title": "King Henry VI, Part 1"
      },
      {
        "id": "g1101",
        "title": "King Henry VI, Part 2"
      },
      {
        "id": "g1102",
        "title": "King Henry VI, Part 3"
      },
      {
        "id": "g1103",
        "title": "King Richard III"
      },
      {
        "id": "g1104",
        "title": "The Comedy of Errors"
      },
      {
        "id": "g1105",
        "title": "The Sonnets"
      },
      {
        "id": "g1106",
        "title": "Titus Andronicus"
      },
      {
        "id": "g1107",
        "title": "The Taming of the Shrew"
      },
      {
        "id": "g1108",
        "title": "The Two Gentlemen of Verona"
      },
      {
        "id": "g1109",
        "title": "Love's Labour's Lost"
      },
      {
        "id": "g1110",
        "title": "King John"
      },
      {
        "id": "g1111",
        "title": "King Richard II"
      },
      {
        "id": "g1112",
        "title": "Romeo and Juliet"
      },
      {
        "id": "g1113",
        "title": "A Midsummer Night's Dream"
      },
      {
        "id": "g1114",
        "title": "The Merchant of Venice"
      },
      {
        "id": "g1115",
        "title": "King Henry IV, Part 1"
      },
      {
        "id": "g1116",
        "title": "The Merry Wives of Windsor"
      },
      {
        "id": "g1117",
        "title": "King Henry IV, Part 2"
      },
      {
        "id": "g1118",
        "title": "Much Ado about Nothing"
      },
      {
        "id": "g1119",
        "title": "King Henry V"
      },
      {
        "id": "g1120",
        "title": "Julius Caesar"
      },
      {
        "id": "g1121",
        "title": "As You Like It"
      },
      {
        "id": "g1122",
        "title": "Hamlet"
      },
      {
        "id": "g1123",
        "title": "Twelfth Night"
      },
      {
        "id": "g1124",
        "title": "Troilus and Cressida"
      },
      {
        "id": "g1125",
        "title": "All's Well That Ends Well"
      },
      {
        "id": "g1126",
        "title": "Measure for Measure"
      },
      {
        "id": "g1127",
        "title": "Othello"
      },
      {
        "id": "g1128",
        "title": "King Lear"
      },
      {
        "id": "g1129",
        "title": "The Tragedy of Macbeth"
      },
      {
        "id": "g1130",
        "title": "Antony and Cleopatra"
      },
      {
        "id": "g1131",
        "title": "Coriolanus"
      },
      {
        "id": "g1132",
        "title": "Timon of Athens"
      },
      {
        "id": "g1133",
        "title": "Cymbeline"
      },
      {
        "id": "g1134",
        "title": "The Winter's Tale"
      },
      {
        "id": "g1135",
        "title": "The Tempest"
      },
      {
        "id": "g1136",
        "title": "King Henry VIII"
      },
      {
        "id": "g1137",
        "title": "A Lover's Complaint"
      },
      {
        "id": "g12578",
        "title": "Shakespeare's play of the Merchant of Venice: Arranged for Representation at the Princess's Theatre, with Historical and Explanatory Notes by Charles Kean, F.S.A."
      },
      {
        "id": "g12842",
        "title": "A Fairy Tale in Two Acts Taken from Shakespeare (1763)"
      },
      {
        "id": "g13868",
        "title": "Macbeth"
      },
      {
        "id": "g1500",
        "title": "King Henry VI, Part 1"
      },
      {
        "id": "g1501",
        "title": "King Henry VI, Part 2"
      },
      {
        "id": "g1502",
        "title": "King Henry VI, Part 3"
      },
      {
        "id": "g1503",
        "title": "King Richard III"
      },
      {
        "id": "g15032",
        "title": "Hamlet"
      }
    ],
    "total": 330,
    "hasMore": true,
    "cursor": "g15032"
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g15032"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g1504",
        "title": "The Comedy of Errors"
      },
      {
        "id": "g1505",
        "title": "The Rape of Lucrece"
      },
      {
        "id": "g1506",
        "title": "The Two Noble Kinsmen"
      },
... 195 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g15032"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g1504",
        "title": "The Comedy of Errors"
      },
      {
        "id": "g1505",
        "title": "The Rape of Lucrece"
      },
      {
        "id": "g1506",
        "title": "The Two Noble Kinsmen"
      },
      {
        "id": "g1507",
        "title": "Titus Andronicus"
      },
      {
        "id": "g15071",
        "title": "La Tempête"
      },
      {
        "id": "g1508",
        "title": "The Taming of the Shrew"
      },
      {
        "id": "g1509",
        "title": "The Two Gentlemen of Verona"
      },
      {
        "id": "g1510",
        "title": "Love's Labour's Lost"
      },
      {
        "id": "g1511",
        "title": "King John"
      },
      {
        "id": "g1512",
        "title": "King Richard II"
      },
      {
        "id": "g1513",
        "title": "Romeo and Juliet"
      },
      {
        "id": "g1514",
        "title": "A Midsummer Night's Dream"
      },
      {
        "id": "g1515",
        "title": "The Merchant of Venice"
      },
      {
        "id": "g1516",
        "title": "King Henry IV, Part 1"
      },
      {
        "id": "g1517",
        "title": "The Merry Wives of Windsor"
      },
      {
        "id": "g1518",
        "title": "King Henry IV, Part 2"
      },
      {
        "id": "g1519",
        "title": "Much Ado about Nothing"
      },
      {
        "id": "g1520",
        "title": "Much Ado about Nothing"
      },
      {
        "id": "g1521",
        "title": "King Henry V"
      },
      {
        "id": "g1522",
        "title": "Julius Caesar"
      },
      {
        "id": "g1523",
        "title": "As You Like It"
      },
      {
        "id": "g1524",
        "title": "Hamlet"
      },
      {
        "id": "g1525",
        "title": "The Phoenix and the Turtle"
      },
      {
        "id": "g1526",
        "title": "Twelfth Night"
      },
      {
        "id": "g1527",
        "title": "Twelfth Night"
      },
      {
        "id": "g1528",
        "title": "Troilus and Cressida"
      },
      {
        "id": "g1529",
        "title": "All's Well That Ends Well"
      },
      {
        "id": "g1530",
        "title": "Measure for Measure"
      },
      {
        "id": "g15303",
        "title": "Coriolan"
      },
      {
        "id": "g1531",
        "title": "Othello"
      },
      {
        "id": "g1532",
        "title": "King Lear"
      },
      {
        "id": "g1533",
        "title": "Macbeth"
      },
      {
        "id": "g1534",
        "title": "Antony and Cleopatra"
      },
      {
        "id": "g1535",
        "title": "Coriolanus"
      },
      {
        "id": "g1536",
        "title": "Timon of Athens"
      },
      {
        "id": "g1537",
        "title": "Pericles, Prince of Tyre"
      },
      {
        "id": "g1538",
        "title": "Cymbeline"
      },
      {
        "id": "g1539",
        "title": "The Winter's Tale"
      },
      {
        "id": "g1540",
        "title": "The Tempest"
      },
      {
        "id": "g1541",
        "title": "King Henry VIII"
      },
      {
        "id": "g1543",
        "title": "A Lover's Complaint"
      },
      {
        "id": "g1544",
        "title": "The Passionate Pilgrim"
      },
      {
        "id": "g1545",
        "title": "Mucedorus"
      },
      {
        "id": "g1546",
        "title": "Sonnets on Sundry Notes of Music"
      },
      {
        "id": "g1547",
        "title": "Sir Thomas More"
      },
      {
        "id": "g1548",
        "title": "Locrine"
      },
      {
        "id": "g15632",
        "title": "Hamlet"
      },
      {
        "id": "g15643",
        "title": "Romeo ja Julia"
      },
      {
        "id": "g15846",
        "title": "Beaucoup de Bruit pour Rien"
      },
      {
        "id": "g15847",
        "title": "Jules César"
      }
    ],
    "total": 330,
    "hasMore": true,
    "cursor": "g15847"
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g15847"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g15848",
        "title": "La Comédie des Méprises"
      },
      {
        "id": "g15849",
        "title": "Timon d'Athènes"
      },
      {
        "id": "g15942",
        "title": "Antoine et Cléopâtre"
      },
... 195 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g15847"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g15848",
        "title": "La Comédie des Méprises"
      },
      {
        "id": "g15849",
        "title": "Timon d'Athènes"
      },
      {
        "id": "g15942",
        "title": "Antoine et Cléopâtre"
      },
      {
        "id": "g16128",
        "title": "Le Jour des Rois"
      },
      {
        "id": "g16490",
        "title": "Kuningas Lear"
      },
      {
        "id": "g16618",
        "title": "Antonius ja Cleopatra"
      },
      {
        "id": "g16710",
        "title": "Les Deux Gentilshommes de Vérone"
      },
      {
        "id": "g16893",
        "title": "Macbeth"
      },
      {
        "id": "g17046",
        "title": "Les alegres comares de Windsor"
      },
      {
        "id": "g1736",
        "title": "Thomas Lord Cromwell"
      },
      {
        "id": "g17529",
        "title": "Othello"
      },
      {
        "id": "g1765",
        "title": "King Henry VI, Part 1"
      },
      {
        "id": "g1768",
        "title": "King Richard III"
      },
      {
        "id": "g17686",
        "title": "Troilus ja Cressida"
      },
      {
        "id": "g1769",
        "title": "The Comedy of Errors"
      },
      {
        "id": "g1770",
        "title": "King Edward III"
      },
      {
        "id": "g1771",
        "title": "Titus Andronicus"
      },
      {
        "id": "g1772",
        "title": "The Taming of the Shrew"
      },
      {
        "id": "g1773",
        "title": "The Two Gentlemen of Verona"
      },
      {
        "id": "g1774",
        "title": "Love's Labour's Lost"
      },
      {
        "id": "g1775",
        "title": "King John"
      },
      {
        "id": "g1776",
        "title": "King Richard II"
      },
      {
        "id": "g1777",
        "title": "Romeo and Juliet"
      },
      {
        "id": "g1778",
        "title": "A Midsummer Night's Dream"
      },
      {
        "id": "g1779",
        "title": "The Merchant of Venice"
      },
      {
        "id": "g1780",
        "title": "King Henry IV, Part 1"
      },
      {
        "id": "g1781",
        "title": "The Merry Wives of Windsor"
      },
      {
        "id": "g1782",
        "title": "King Henry IV, Part 2"
      },
      {
        "id": "g1783",
        "title": "Much Ado About Nothing"
      },
      {
        "id": "g1784",
        "title": "King Henry V"
      },
      {
        "id": "g1785",
        "title": "Julius Caesar"
      },
      {
        "id": "g1786",
        "title": "As You Like It"
      },
      {
        "id": "g1787",
        "title": "Hamlet"
      },
      {
        "id": "g1788",
        "title": "Sir John Oldcastle"
      },
      {
        "id": "g1790",
        "title": "Troilus and Cressida"
      },
      {
        "id": "g1791",
        "title": "All's Well That Ends Well"
      },
      {
        "id": "g1792",
        "title": "Measure for Measure"
      },
      {
        "id": "g1793",
        "title": "Othello"
      },
      {
        "id": "g17930",
        "title": "Le songe d'une nuit d'été"
      },
      {
        "id": "g1794",
        "title": "King Lear"
      },
      {
        "id": "g1795",
        "title": "Macbeth"
      },
      {
        "id": "g1796",
        "title": "Antony and Cleopatra"
      },
      {
        "id": "g1797",
        "title": "Coriolanus"
      },
      {
        "id": "g1798",
        "title": "Timon of Athens"
      },
      {
        "id": "g1799",
        "title": "Cymbeline"
      },
      {
        "id": "g1800",
        "title": "The Winter's Tale"
      },
      {
        "id": "g1801",
        "title": "The Tempest"
      },
      {
        "id": "g1802",
        "title": "King Henry VIII"
      },
      {
        "id": "g18143",
        "title": "Roméo et Juliette: Tragédie"
      },
      {
        "id": "g18144",
        "title": "Timon Ateenalainen"
      }
    ],
    "total": 330,
    "hasMore": true,
    "cursor": "g18144"
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g18144"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g18162",
        "title": "Comme il vous plaira"
      },
      {
        "id": "g18169",
        "title": "Mesure pour mesure"
      },
      {
        "id": "g18179",
        "title": "Othello"
      },
... 195 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g18144"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g18162",
        "title": "Comme il vous plaira"
      },
      {
        "id": "g18169",
        "title": "Mesure pour mesure"
      },
      {
        "id": "g18179",
        "title": "Othello"
      },
      {
        "id": "g18311",
        "title": "Le conte d'hiver"
      },
      {
        "id": "g18312",
        "title": "Le roi Lear"
      },
      {
        "id": "g18313",
        "title": "Troïlus et Cressida"
      },
      {
        "id": "g18512",
        "title": "Julius Caesar"
      },
      {
        "id": "g19201",
        "title": "Cymbeline: Tragédie"
      },
      {
        "id": "g19219",
        "title": "La méchante femme mise à la raison: Comédie"
      },
      {
        "id": "g19227",
        "title": "Peines d'amour perdues: Comédie"
      },
      {
        "id": "g19228",
        "title": "Périclès: Tragédie"
      },
      {
        "id": "g20188",
        "title": "Coriolanus"
      },
      {
        "id": "g20720",
        "title": "Les joyeuses Bourgeoises de Windsor"
      },
      {
        "id": "g20773",
        "title": "Le marchand de Venise"
      },
      {
        "id": "g21100",
        "title": "Titus Andronicus"
      },
      {
        "id": "g21277",
        "title": "La vie et la mort du roi Richard II"
      },
      {
        "id": "g21856",
        "title": "Le roi Jean"
      },
      {
        "id": "g22045",
        "title": "La festa dels reis: Lo que vulgueu"
      },
      {
        "id": "g2235",
        "title": "The Tempest"
      },
      {
        "id": "g2236",
        "title": "The Two Gentlemen of Verona"
      },
      {
        "id": "g2237",
        "title": "The Merry Wives of Windsor"
      },
      {
        "id": "g2238",
        "title": "Measure for Measure"
      },
      {
        "id": "g2239",
        "title": "The Comedy of Errors"
      },
      {
        "id": "g2240",
        "title": "Much Ado about Nothing"
      },
      {
        "id": "g2241",
        "title": "Love's Labour's Lost"
      },
      {
        "id": "g2242",
        "title": "A Midsummer Night's Dream"
      },
      {
        "id": "g2243",
        "title": "The Merchant of Venice"
      },
      {
        "id": "g2244",
        "title": "As You Like It"
      },
      {
        "id": "g2245",
        "title": "The Taming of the Shrew"
      },
      {
        "id": "g2246",
        "title": "All's Well That Ends Well"
      },
      {
        "id": "g2247",
        "title": "Twelfth Night"
      },
      {
        "id": "g2248",
        "title": "The Winter's Tale"
      },
      {
        "id": "g2249",
        "title": "King John"
      },
      {
        "id": "g2250",
        "title": "King Richard II"
      },
      {
        "id": "g2251",
        "title": "King Henry IV, Part 1"
      },
      {
        "id": "g2252",
        "title": "King Henry IV, Part 2"
      },
      {
        "id": "g2253",
        "title": "King Henry V"
      },
      {
        "id": "g2254",
        "title": "King Henry VI, Part 1"
      },
      {
        "id": "g2255",
        "title": "King Henry VI, Part 2"
      },
      {
        "id": "g22556",
        "title": "Cymbeline"
      },
      {
        "id": "g2256",
        "title": "King Henry VI, Part 3"
      },
      {
        "id": "g2257",
        "title": "King Richard III"
      },
      {
        "id": "g2258",
        "title": "King Henry VIII"
      },
      {
        "id": "g2259",
        "title": "Coriolanus"
      },
      {
        "id": "g2260",
        "title": "Titus Andronicus"
      },
      {
        "id": "g2261",
        "title": "Romeo and Juliet"
      },
      {
        "id": "g2262",
        "title": "Timon of Athens"
      },
      {
        "id": "g2263",
        "title": "Julius Caesar"
      },
      {
        "id": "g2264",
        "title": "Macbeth"
      },
      {
        "id": "g2265",
        "title": "Hamlet"
      }
    ],
    "total": 330,
    "hasMore": true,
    "cursor": "g2265"
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g2265"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g2266",
        "title": "King Lear"
      },
      {
        "id": "g2267",
        "title": "Othello"
      },
      {
        "id": "g2268",
        "title": "Antony and Cleopatra"
      },
... 195 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g2265"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g2266",
        "title": "King Lear"
      },
      {
        "id": "g2267",
        "title": "Othello"
      },
      {
        "id": "g2268",
        "title": "Antony and Cleopatra"
      },
      {
        "id": "g2269",
        "title": "Cymbeline"
      },
      {
        "id": "g2270",
        "title": "Shakespeare's First Folio"
      },
      {
        "id": "g22760",
        "title": "Henri IV (1re partie)"
      },
      {
        "id": "g22791",
        "title": "King Henry V: Arranged for Representation at the Princess's Theatre"
      },
      {
        "id": "g23041",
        "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 1 of 9]: Introduction and Publisher's Advertising"
      },
      {
        "id": "g23042",
        "title": "The Tempest: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"
      },
      {
        "id": "g23043",
        "title": "Two Gentlemen of Verona: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"
      },
      {
        "id": "g23044",
        "title": "The Merry Wives of Windsor: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"
      },
      {
        "id": "g23045",
        "title": "Measure for Measure: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"
      },
      {
        "id": "g23046",
        "title": "The Comedy of Errors: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"
      },
      {
        "id": "g23676",
        "title": "Titus Andronicus"
      },
      {
        "id": "g25667",
        "title": "Hamlet: Drama em cinco Actos"
      },
      {
        "id": "g25694",
        "title": "Venus et Adonis"
      },
      {
        "id": "g25707",
        "title": "Titus Andronicus"
      },
      {
        "id": "g25715",
        "title": "Henri IV (2e partie)"
      },
      {
        "id": "g25843",
        "title": "De Klucht der Vergissingen"
      },
      {
        "id": "g26169",
        "title": "La Tempesta"
      },
      {
        "id": "g26594",
        "title": "Twee Edellieden van Verona"
      },
      {
        "id": "g26757",
        "title": "La mort de Lucrèce"
      },
      {
        "id": "g26758",
        "title": "La plainte d'une amante"
      },
      {
        "id": "g26759",
        "title": "La vie et la mort du roi Richard III"
      },
      {
        "id": "g26762",
        "title": "Henri V"
      },
      {
        "id": "g26763",
        "title": "Henri VI (1/3)"
      },
      {
        "id": "g26764",
        "title": "Henri VI (2/3)"
      },
      {
        "id": "g26765",
        "title": "Henri VI (3/3)"
      },
      {
        "id": "g26766",
        "title": "Henri VIII"
      },
      {
        "id": "g27062",
        "title": "Romeo i Julia: Tragedya w 5 Aktach"
      },
      {
        "id": "g27191",
        "title": "Sonnets. Volume 8"
      },
      {
        "id": "g27536",
        "title": "El Marxant de Venecia"
      },
      {
        "id": "g27708",
        "title": "Loppiaisaatto eli Miten mielitte"
      },
      {
        "id": "g27761",
        "title": "Hamlet"
      },
      {
        "id": "g28150",
        "title": "Le Pèlerin amoureux"
      },
      {
        "id": "g28151",
        "title": "Tout est bien qui finit bien"
      },
      {
        "id": "g28334",
        "title": "The New Hudson Shakespeare: Julius Cæsar"
      },
      {
        "id": "g28965",
        "title": "Kuningas Juhana"
      },
      {
        "id": "g29359",
        "title": "De Koopman van Venetië: Drama in vijf bedrijven"
      },
      {
        "id": "g30790",
        "title": "Kuningas Richard Toinen"
      },
      {
        "id": "g31126",
        "title": "Een Midzomernachtdroom"
      },
      {
        "id": "g31405",
        "title": "Η τρικυμία"
      },
      {
        "id": "g31797",
        "title": "Αμλέτος"
      },
      {
        "id": "g31808",
        "title": "Σαικσπείρου Τραγωδίαι : Μέρος Α'. Ρωμαίος και Ιουλιέτα"
      },
      {
        "id": "g32305",
        "title": "Σαικσπήρου Δράματα, Ο Βασιλιάς Ληρ"
      },
      {
        "id": "g32797",
        "title": "Οθέλλος: Σαικσπείρου Τραγωδίαι Μέρος Β'"
      },
      {
        "id": "g33961",
        "title": "Αντώνιος και Κλεοπάτρα: Τραγωδία εις πράξεις 5"
      },
      {
        "id": "g34434",
        "title": "Μάκβεθ"
      },
      {
        "id": "g37279",
        "title": "Hamleto, Reĝido de Danujo"
      },
      {
        "id": "g37835",
        "title": "Kuningas Richard Kolmas"
      }
    ],
    "total": 330,
    "hasMore": true,
    "cursor": "g37835"
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g37835"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g38901",
        "title": "Twelfth Night"
      },
      {
        "id": "g39557",
        "title": "Kuningas Henrik Neljäs I"
      },
      {
        "id": "g39636",
        "title": "Kuningas Henrik Neljäs II"
      },
... 195 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g37835"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g38901",
        "title": "Twelfth Night"
      },
      {
        "id": "g39557",
        "title": "Kuningas Henrik Neljäs I"
      },
      {
        "id": "g39636",
        "title": "Kuningas Henrik Neljäs II"
      },
      {
        "id": "g39939",
        "title": "Kuningas Henrik Viides"
      },
      {
        "id": "g40070",
        "title": "Kuningas Henrik Kuudes I"
      },
      {
        "id": "g40115",
        "title": "Kuningas Henrik Kuudes II"
      },
      {
        "id": "g40174",
        "title": "Kuningas Henrik Kuudes III"
      },
      {
        "id": "g4031",
        "title": "The London Prodigal"
      },
      {
        "id": "g4214",
        "title": "The Puritan Widow"
      },
      {
        "id": "g4255",
        "title": "A Yorkshire Tragedy"
      },
      {
        "id": "g42873",
        "title": "Kuningas Henrik Kahdeksas"
      },
      {
        "id": "g42898",
        "title": "Paljo melua tyhjästä"
      },
      {
        "id": "g42966",
        "title": "Kuinka äkäpussi kesytetään"
      },
      {
        "id": "g43440",
        "title": "Arden of Feversham"
      },
      {
        "id": "g43532",
        "title": "Miten haluatte"
      },
      {
        "id": "g44158",
        "title": "Hairauksia"
      },
      {
        "id": "g44580",
        "title": "Loppu hyvä, kaikki hyvä"
      },
      {
        "id": "g44602",
        "title": "Turhaa lemmen touhua"
      },
      {
        "id": "g44825",
        "title": "Verta verrasta"
      },
      {
        "id": "g44826",
        "title": "Iloiset Windsorin rouvat"
      },
      {
        "id": "g44831",
        "title": "Kesäyön unelma"
      },
      {
        "id": "g44832",
        "title": "Venetian kauppias"
      },
      {
        "id": "g44839",
        "title": "Kaksi nuorta veronalaista"
      },
      {
        "id": "g44840",
        "title": "Talvinen tarina"
      },
      {
        "id": "g44845",
        "title": "Myrsky"
      },
      {
        "id": "g45128",
        "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 2 of 9]"
      },
      {
        "id": "g46768",
        "title": "Julius Cæsar"
      },
      {
        "id": "g47518",
        "title": "The Tempest"
      },
      {
        "id": "g47715",
        "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 7 of 9]"
      },
      {
        "id": "g4774",
        "title": "The Merry Devil of Edmonton"
      },
      {
        "id": "g47913",
        "title": "Makbeto"
      },
      {
        "id": "g47960",
        "title": "Romeo and Juliet"
      },
      {
        "id": "g48386",
        "title": "Veel Gemin, geen Gewin"
      },
      {
        "id": "g49007",
        "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 6 of 9]"
      },
      {
        "id": "g49008",
        "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 8 of 9]"
      },
      {
        "id": "g49297",
        "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 5 of 9]"
      },
      {
        "id": "g49880",
        "title": "Romeo en Julia"
      },
      {
        "id": "g50095",
        "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 4 of 9]"
      },
      {
        "id": "g50559",
        "title": "The Works of William Shakespeare [Cambridge Edition] [Vol. 3 of 9]"
      },
      {
        "id": "g51138",
        "title": "De Koopman van Venetië"
      },
      {
        "id": "g5137",
        "title": "Fair Em"
      },
      {
        "id": "g51691",
        "title": "De getemde feeks"
      },
      {
        "id": "g53207",
        "title": "Dramas de Guillermo Shakspeare [vol. 1]"
      },
      {
        "id": "g55662",
        "title": "Koning Jan"
      },
      {
        "id": "g56454",
        "title": "Hamlet: Drama en cinco actos"
      },
      {
        "id": "g56851",
        "title": "Shakspeare's Mental Photographs"
      },
      {
        "id": "g59686",
        "title": "Dramas de Guillermo Shakspeare [vol. 4]"
      },
      {
        "id": "g61103",
        "title": "Kiel plaĉas al vi: komedio en kvin aktoj"
      },
      {
        "id": "g63367",
        "title": "Koning Hendrik de Vierde"
      },
      {
        "id": "g63368",
        "title": "Koning Richard de Tweede"
      }
    ],
    "total": 330,
    "hasMore": true,
    "cursor": "g63368"
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g63368"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
... 3 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g64102",
        "title": "Flowers from Shakespeare's Garden: A Posy from the Plays"
      },
      {
        "id": "g67635",
        "title": "Koning Hendrik de Vijfde"
      },
      {
        "id": "g6924",
        "title": "Richard III"
      },
... 115 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "filter": {
          "authorId": "ga56"
        },
        "page": {
          "first": 50,
          "after": "g63368"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g64102",
        "title": "Flowers from Shakespeare's Garden: A Posy from the Plays"
      },
      {
        "id": "g67635",
        "title": "Koning Hendrik de Vijfde"
      },
      {
        "id": "g6924",
        "title": "Richard III"
      },
      {
        "id": "g6975",
        "title": "Macbeth"
      },
      {
        "id": "g6990",
        "title": "Coriolanus"
      },
      {
        "id": "g6996",
        "title": "Romeo und Julia"
      },
      {
        "id": "g7022",
        "title": "Ein Sommernachtstraum"
      },
      {
        "id": "g7041",
        "title": "Wie es Euch gefällt"
      },
      {
        "id": "g7043",
        "title": "Der Kaufmann von Venedig"
      },
      {
        "id": "g71836",
        "title": "La ventego de Shakespeare"
      },
      {
        "id": "g7185",
        "title": "Othello"
      },
      {
        "id": "g7186",
        "title": "Was ihr wollt"
      },
      {
        "id": "g7225",
        "title": "Die Irrungen, oder die Doppelten Zwillinge"
      },
      {
        "id": "g7226",
        "title": "Timon von Athen"
      },
      {
        "id": "g7232",
        "title": "Romeo und Juliette"
      },
      {
        "id": "g7233",
        "title": "Maaß für Maaß: Wie einer mißt, so wird ihm wieder gemessen"
      },
      {
        "id": "g7236",
        "title": "Der Sturm, oder Die bezauberte Insel"
      },
      {
        "id": "g7240",
        "title": "Das Leben und der Tod des Königs Lear"
      },
      {
        "id": "g7264",
        "title": "Ein St.-Johannis-Nachts-Traum"
      },
      {
        "id": "g7269",
        "title": "Macbeth"
      },
      {
        "id": "g7276",
        "title": "Hamlet, Prinz von Dännemark"
      },
      {
        "id": "g7292",
        "title": "Leben und Tod des Königs Johann"
      },
      {
        "id": "g7323",
        "title": "Leben und Tod Königs Richard des zweyten"
      },
      {
        "id": "g75268",
        "title": "Koning Hendrik de Zesde"
      },
      {
        "id": "g76912",
        "title": "Koning Richard de Derde"
      },
      {
        "id": "g76946",
        "title": "De vroolijke vrouwtjes van Windsor"
      },
      {
        "id": "g7933",
        "title": "König Heinrich der vierte. Der Erste Theil"
      },
      {
        "id": "g7934",
        "title": "König Heinrich der vierte. Der Zweyte Theil, der seinen Tod, und die Crönung von Heinrich dem fünften enthält."
      },
      {
        "id": "g9077",
        "title": "Hamlet: The First ('Bad') Quarto"
      },
      {
        "id": "g9875",
        "title": "Julius Caesar"
      }
    ],
    "total": 330,
    "hasMore": false,
    "cursor": "g9875"
  },
  "fin": true
}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 92 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"authorId":"ga43"},"page":{"first":50}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 2453 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g102","title":"The Tragedy of Pudd'nhead Wilson"},{"id":"g1044","title":"Extract from Captain Stormfield's Visit to Heaven"},{"id":"g1086","title":"A Horse's Tale"},{"id":"g11622","title":"Plus fort que Sherlock Holmès"},{"id":"g119","title":"A Tramp Abroad"},{"id":"g1213","title":"The Man That Corrupted Hadleyburg"},{"id":"g142","title":"The $30,000 Bequest, and Other Stories"},{"id":"g17945","title":"Mark Twain: Tri Noveloj"},{"id":"g1837","title":"The Prince and the Pauper"},{"id":"g18381","title":"De Lotgevallen van Tom Sawyer"},{"id":"g1892","title":"Extracts from Adam's Diary, translated from the original ms."},{"id":"g19484","title":"Editorial Wild Oats"},{"id":"g19987","title":"Chapters from My Autobiography"},{"id":"g20943","title":"Mark Twain: Tri Ceteraj Noveloj"},{"id":"g2431","title":"Is Shakespeare Dead?: From My Autobiography"},{"id":"g245","title":"Life on the Mississippi"},{"id":"g2572","title":"On the Decay of the Art of Lying"},{"id":"g2874","title":"Personal Recollections of Joan of Arc — Volume 1"},{"id":"g2875","title":"Personal Recollections of Joan of Arc — Volume 2"},{"id":"g28803","title":"The Works of Mark Twain: An Index of all Project Gutenberg Editions"},{"id":"g2895","title":"Following the Equator: A Journey Around the World"},{"id":"g30165","title":"Die Abenteuer Tom Sawyers"},{"id":"g30890","title":"Les Aventures De Tom Sawyer"},{"id":"g3171","title":"In Defence of Harriet Shelley"},{"id":"g3172","title":"Fenimore Cooper's Literary Offences"},{"id":"g3173","title":"Essays on Paul Bourget"},{"id":"g3174","title":"A Dog's Tale"},{"id":"g3175","title":"Mark Twain's Burlesque Autobiography"},{"id":"g3176","title":"The Innocents Abroad"},{"id":"g3177","title":"Roughing It"},{"id":"g3178","title":"The Gilded Age: A Tale of Today"},{"id":"g3179","title":"The American Claimant"},{"id":"g3180","title":"A Double Barrelled Detective Story"},{"id":"g3181","title":"The Stolen White Elephant"},{"id":"g3182","title":"Some Rambling Notes of an Idle Excursion"},{"id":"g3183","title":"The Facts Concerning the Recent Carnival of Crime in Connecticut"},{"id":"g3184","title":"Alonzo Fitz, and Other Stories"},{"id":"g3185","title":"Those Extraordinary Twins"},{"id":"g3186","title":"The Mysterious Stranger, and Other Stories"},{"id":"g3187","title":"Christian Science"},{"id":"g3188","title":"Mark Twain's Speeches"},{"id":"g3189","title":"Sketches New and Old"},{"id":"g3190","title":"1601: Conversation as it was by the Social Fireside in the Time of the Tudors"},{"id":"g3191","title":"Goldsmith's Friend Abroad Again"},{"id":"g3192","title":"The Curious Republic of Gondour, and Other Whimsical Sketches"},{"id":"g3193","title":"Mark Twain's Letters — Volume 1 (1853-1866)"},{"id":"g3194","title":"Mark Twain's Letters — Volume 2 (1867-1875)"},{"id":"g3195","title":"Mark Twain's Letters — Volume 3 (1876-1885)"},{"id":"g3196","title":"Mark Twain's Letters — Volume 4 (1886-1900)"},{"id":"g3197","title":"Mark Twain's Letters — Volume 5 (1901-1906)"}],"total":196,"hasMore":true,"cursor":"g3197"},"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 100 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"authorId":"ga43"},"page":{"first":50,"after":"g3197"}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 2782 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g3198","title":"Mark Twain's Letters — Volume 6 (1907-1910)"},{"id":"g3199","title":"Mark Twain's Letters — Complete (1853-1910)"},{"id":"g3200","title":"The Entire Project Gutenberg Works of Mark Twain"},{"id":"g32325","title":"The Adventures of Huckleberry Finn (Tom Sawyer's Comrade)"},{"id":"g3250","title":"How to Tell a Story, and Other Essays"},{"id":"g3251","title":"The Man That Corrupted Hadleyburg, and Other Stories"},{"id":"g33077","title":"The Treaty With China, its Provisions Explained: New York Tribune, Tuesday, August 28, 1868"},{"id":"g3432","title":"Quotations from the Project Gutenberg Editions of the Works of Mark Twain"},{"id":"g45333","title":"Tom Sawyer: Koulupojan historia"},{"id":"g47095","title":"Huckleberry Finnin (Tom Sawyerin toverin) seikkailut"},{"id":"g47257","title":"Prinssi ja kerjäläispoika"},{"id":"g47410","title":"Tom Sawyer salapoliisina: Huck Finnin kertomus"},{"id":"g47411","title":"Tom Sawyer ilmailija: Huckleberry Finn'in jatko"},{"id":"g48397","title":"Luotsina Mississippi-joella: Humoristinen kertomus"},{"id":"g48412","title":"Johanna d'Arc: Kertomus hänen elämästään ja marttyrikuolemastaan"},{"id":"g48415","title":"Jenkkejä maailmalla I: Heidän toivioretkensä Pyhälle Maalle"},{"id":"g48416","title":"Jenkkejä maailmalla II: Heidän toivioretkensä Pyhälle Maalle"},{"id":"g50109","title":"The Mysterious Stranger: A Romance"},{"id":"g51795","title":"Taivasko vai helvetti y.m. humoreskeja"},{"id":"g53301","title":"Nimensä pilannut kaupunki"},{"id":"g5688","title":"The Innocents Abroad — Volume 01"},{"id":"g5689","title":"The Innocents Abroad — Volume 02"},{"id":"g5690","title":"The Innocents Abroad — Volume 03"},{"id":"g5691","title":"The Innocents Abroad — Volume 04"},{"id":"g5692","title":"The Innocents Abroad — Volume 05"},{"id":"g5693","title":"The Innocents Abroad — Volume 06"},{"id":"g5782","title":"A Tramp Abroad — Volume 01"},{"id":"g5783","title":"A Tramp Abroad — Volume 02"},{"id":"g5784","title":"A Tramp Abroad — Volume 03"},{"id":"g5785","title":"A Tramp Abroad — Volume 04"},{"id":"g5786","title":"A Tramp Abroad — Volume 05"},{"id":"g5787","title":"A Tramp Abroad — Volume 06"},{"id":"g5788","title":"A Tramp Abroad — Volume 07"},{"id":"g5808","title":"Following the Equator: A Journey Around the World. Part 1"},{"id":"g5809","title":"Following the Equator: A Journey Around the World. Part 2"},{"id":"g5810","title":"Following the Equator: A Journey Around the World. Part 3"},{"id":"g5811","title":"Following the Equator: A Journey Around the World. Part 4"},{"id":"g5812","title":"Following the Equator: A Journey Around the World. Part 5"},{"id":"g5813","title":"Following the Equator: A Journey Around the World. Part 6"},{"id":"g5814","title":"Following the Equator: A Journey Around the World. Part 7"},{"id":"g5818","title":"The Gilded Age, Part 1."},{"id":"g5819","title":"The Gilded Age, Part 2."},{"id":"g5820","title":"The Gilded Age, Part 3."},{"id":"g5821","title":"The Gilded Age, Part 4."},{"id":"g5822","title":"The Gilded Age, Part 5."},{"id":"g5823","title":"The Gilded Age, Part 6."},{"id":"g5824","title":"The Gilded Age, Part 7."},{"id":"g5836","title":"Sketches New and Old, Part 1."},{"id":"g5837","title":"Sketches New and Old, Part 2."},{"id":"g5838","title":"Sketches New and Old, Part 3."}],"total":196,"hasMore":true,"cursor":"g5838"},"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 100 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"authorId":"ga43"},"page":{"first":50,"after":"g5838"}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 2541 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g5839","title":"Sketches New and Old, Part 4."},{"id":"g5840","title":"Sketches New and Old, Part 5."},{"id":"g5841","title":"Sketches New and Old, Part 6."},{"id":"g5842","title":"Sketches New and Old, Part 7."},{"id":"g60900","title":"Merry Tales"},{"id":"g61338","title":"Moments with Mark Twain"},{"id":"g61522","title":"The £1,000,000 bank-note, and other new stories"},{"id":"g61644","title":"Salapoliisijuttu sekin y.m. kertomuksia"},{"id":"g62636","title":"To the Person Sitting in Darkness"},{"id":"g62739","title":"King Leopold's Soliloquy: A Defense of His Congo Rule"},{"id":"g64417","title":"Tom Sawyers Abenteuer und Streiche"},{"id":"g64482","title":"Abenteuer und Fahrten des Huckleberry Finn"},{"id":"g64718","title":"Skizzenbuch"},{"id":"g64869","title":"Auf dem Mississippi; Nach dem fernen Westen"},{"id":"g65089","title":"Im Gold- und Silberland"},{"id":"g65212","title":"Reisebilder und verschiedene Skizzen"},{"id":"g65346","title":"Tom Sawyers Neue Abenteuer"},{"id":"g65648","title":"Querkopf Wilson"},{"id":"g66159","title":"Huckleberry Finn kalandjai"},{"id":"g66437","title":"Meine Reise um die Welt. Erste Abteilung"},{"id":"g66673","title":"Meine Reise um die Welt. Zweite Abteilung"},{"id":"g66904","title":"Adams Tagebuch, und andere Erzählungen"},{"id":"g66952","title":"Wie Hadleyburg verderbt wurde: Nebst anderen Erzählungen"},{"id":"g68604","title":"Europe and elsewhere"},{"id":"g70","title":"What Is Man? and Other Essays"},{"id":"g70778","title":"Un pari de milliardaires et autres nouvelles"},{"id":"g7100","title":"Adventures of Huckleberry Finn, Chapters 01 to 05"},{"id":"g7101","title":"Adventures of Huckleberry Finn, Chapters 06 to 10"},{"id":"g7102","title":"Adventures of Huckleberry Finn, Chapters 11 to 15"},{"id":"g7103","title":"Adventures of Huckleberry Finn, Chapters 16 to 20"},{"id":"g7104","title":"Adventures of Huckleberry Finn, Chapters 21 to 25"},{"id":"g7105","title":"Adventures of Huckleberry Finn, Chapters 26 to 30"},{"id":"g7106","title":"Adventures of Huckleberry Finn, Chapters 31 to 35"},{"id":"g7107","title":"Adventures of Huckleberry Finn, Chapters 36 to the Last"},{"id":"g7154","title":"The Prince and the Pauper, Part 1."},{"id":"g7155","title":"The Prince and the Pauper, Part 2."},{"id":"g7156","title":"The Prince and the Pauper, Part 3."},{"id":"g7157","title":"The Prince and the Pauper, Part 4."},{"id":"g7158","title":"The Prince and the Pauper, Part 5."},{"id":"g7159","title":"The Prince and the Pauper, Part 6."},{"id":"g7160","title":"The Prince and the Pauper, Part 7."},{"id":"g7161","title":"The Prince and the Pauper, Part 8."},{"id":"g7162","title":"The Prince and the Pauper, Part 9."},{"id":"g71715","title":"Le Legs de 30.000 dollars et autres contes"},{"id":"g71901","title":"Contes choisis"},{"id":"g7193","title":"The Adventures of Tom Sawyer, Part 1."},{"id":"g7194","title":"The Adventures of Tom Sawyer, Part 2."},{"id":"g7195","title":"The Adventures of Tom Sawyer, Part 3."},{"id":"g7196","title":"The Adventures of Tom Sawyer, Part 4."},{"id":"g7197","title":"The Adventures of Tom Sawyer, Part 5."}],"total":196,"hasMore":true,"cursor":"g7197"},"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 100 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"authorId":"ga43"},"page":{"first":50,"after":"g7197"}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 2150 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g7198","title":"The Adventures of Tom Sawyer, Part 6."},{"id":"g7199","title":"The Adventures of Tom Sawyer, Part 7."},{"id":"g7200","title":"The Adventures of Tom Sawyer, Part 8."},{"id":"g7242","title":"A Connecticut Yankee in King Arthur's Court, Part 1."},{"id":"g7243","title":"A Connecticut Yankee in King Arthur's Court, Part 2."},{"id":"g7244","title":"A Connecticut Yankee in King Arthur's Court, Part 3."},{"id":"g7245","title":"A Connecticut Yankee in King Arthur's Court, Part 4."},{"id":"g7246","title":"A Connecticut Yankee in King Arthur's Court, Part 5."},{"id":"g7247","title":"A Connecticut Yankee in King Arthur's Court, Part 6."},{"id":"g7248","title":"A Connecticut Yankee in King Arthur's Court, Part 7."},{"id":"g72486","title":"Les Peterkins"},{"id":"g7249","title":"A Connecticut Yankee in King Arthur's Court, Part 8."},{"id":"g7250","title":"A Connecticut Yankee in King Arthur's Court, Part 9."},{"id":"g72726","title":"Le prétendant américain"},{"id":"g74","title":"The Adventures of Tom Sawyer, Complete"},{"id":"g75104","title":"Amerikkalaisia kaskuja"},{"id":"g7556","title":"Quotes and Images From The Works of Mark Twain"},{"id":"g76","title":"Adventures of Huckleberry Finn"},{"id":"g78786","title":"Le cochon dans les trèfles"},{"id":"g8471","title":"Life on the Mississippi, Part 1."},{"id":"g8472","title":"Life on the Mississippi, Part 2."},{"id":"g8473","title":"Life on the Mississippi, Part 3."},{"id":"g8474","title":"Life on the Mississippi, Part 4."},{"id":"g8475","title":"Life on the Mississippi, Part 5."},{"id":"g8476","title":"Life on the Mississippi, Part 6."},{"id":"g8477","title":"Life on the Mississippi, Part 7."},{"id":"g8478","title":"Life on the Mississippi, Part 8."},{"id":"g8479","title":"Life on the Mississippi, Part 9."},{"id":"g8480","title":"Life on the Mississippi, Part 10."},{"id":"g8481","title":"Life on the Mississippi, Part 11."},{"id":"g8482","title":"Life on the Mississippi, Part 12."},{"id":"g8525","title":"Eve's Diary, Complete"},{"id":"g8526","title":"Eve's Diary, Part 1"},{"id":"g8527","title":"Eve's Diary, Part 2"},{"id":"g8528","title":"Eve's Diary, Part 3"},{"id":"g8582","title":"Roughing It, Part 1."},{"id":"g8583","title":"Roughing It, Part 2."},{"id":"g8584","title":"Roughing It, Part 3."},{"id":"g8585","title":"Roughing It, Part 4."},{"id":"g8586","title":"Roughing It, Part 5."},{"id":"g8587","title":"Roughing It, Part 6."},{"id":"g8588","title":"Roughing It, Part 7."},{"id":"g8589","title":"Roughing It, Part 8."},{"id":"g86","title":"A Connecticut Yankee in King Arthur's Court"},{"id":"g91","title":"Tom Sawyer Abroad"},{"id":"g93","title":"Tom Sawyer, Detective"}],"total":196,"hasMore":false,"cursor":"g93"},"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 92 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"authorId":"ga56"},"page":{"first":50}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 1731 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g100","title":"The Complete Works of William Shakespeare"},{"id":"g1041","title":"Shakespeare's Sonnets"},{"id":"g1045","title":"Venus and Adonis"},{"id":"g10606","title":"Hamlet: A Study with the Text of the Folio of 1623"},{"id":"g1100","title":"King Henry VI, Part 1"},{"id":"g1101","title":"King Henry VI, Part 2"},{"id":"g1102","title":"King Henry VI, Part 3"},{"id":"g1103","title":"King Richard III"},{"id":"g1104","title":"The Comedy of Errors"},{"id":"g1105","title":"The Sonnets"},{"id":"g1106","title":"Titus Andronicus"},{"id":"g1107","title":"The Taming of the Shrew"},{"id":"g1108","title":"The Two Gentlemen of Verona"},{"id":"g1109","title":"Love's Labour's Lost"},{"id":"g1110","title":"King John"},{"id":"g1111","title":"King Richard II"},{"id":"g1112","title":"Romeo and Juliet"},{"id":"g1113","title":"A Midsummer Night's Dream"},{"id":"g1114","title":"The Merchant of Venice"},{"id":"g1115","title":"King Henry IV, Part 1"},{"id":"g1116","title":"The Merry Wives of Windsor"},{"id":"g1117","title":"King Henry IV, Part 2"},{"id":"g1118","title":"Much Ado about Nothing"},{"id":"g1119","title":"King Henry V"},{"id":"g1120","title":"Julius Caesar"},{"id":"g1121","title":"As You Like It"},{"id":"g1122","title":"Hamlet"},{"id":"g1123","title":"Twelfth Night"},{"id":"g1124","title":"Troilus and Cressida"},{"id":"g1125","title":"All's Well That Ends Well"},{"id":"g1126","title":"Measure for Measure"},{"id":"g1127","title":"Othello"},{"id":"g1128","title":"King Lear"},{"id":"g1129","title":"The Tragedy of Macbeth"},{"id":"g1130","title":"Antony and Cleopatra"},{"id":"g1131","title":"Coriolanus"},{"id":"g1132","title":"Timon of Athens"},{"id":"g1133","title":"Cymbeline"},{"id":"g1134","title":"The Winter's Tale"},{"id":"g1135","title":"The Tempest"},{"id":"g1136","title":"King Henry VIII"},{"id":"g1137","title":"A Lover's Complaint"},{"id":"g12578","title":"Shakespeare's play of the Merchant of Venice: Arranged for Representation at the Princess's Theatre, with Historical and Explanatory Notes by Charles Kean, F.S.A."},{"id":"g12842","title":"A Fairy Tale in Two Acts Taken from Shakespeare (1763)"},{"id":"g13868","title":"Macbeth"},{"id":"g1500","title":"King Henry VI, Part 1"},{"id":"g1501","title":"King Henry VI, Part 2"},{"id":"g1502","title":"King Henry VI, Part 3"},{"id":"g1503","title":"King Richard III"},{"id":"g15032","title":"Hamlet"}],"total":330,"hasMore":true,"cursor":"g15032"},"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 101 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"authorId":"ga56"},"page":{"first":50,"after":"g15032"}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 1523 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g1504","title":"The Comedy of Errors"},{"id":"g1505","title":"The Rape of Lucrece"},{"id":"g1506","title":"The Two Noble Kinsmen"},{"id":"g1507","title":"Titus Andronicus"},{"id":"g15071","title":"La Tempête"},{"id":"g1508","title":"The Taming of the Shrew"},{"id":"g1509","title":"The Two Gentlemen of Verona"},{"id":"g1510","title":"Love's Labour's Lost"},{"id":"g1511","title":"King John"},{"id":"g1512","title":"King Richard II"},{"id":"g1513","title":"Romeo and Juliet"},{"id":"g1514","title":"A Midsummer Night's Dream"},{"id":"g1515","title":"The Merchant of Venice"},{"id":"g1516","title":"King Henry IV, Part 1"},{"id":"g1517","title":"The Merry Wives of Windsor"},{"id":"g1518","title":"King Henry IV, Part 2"},{"id":"g1519","title":"Much Ado about Nothing"},{"id":"g1520","title":"Much Ado about Nothing"},{"id":"g1521","title":"King Henry V"},{"id":"g1522","title":"Julius Caesar"},{"id":"g1523","title":"As You Like It"},{"id":"g1524","title":"Hamlet"},{"id":"g1525","title":"The Phoenix and the Turtle"},{"id":"g1526","title":"Twelfth Night"},{"id":"g1527","title":"Twelfth Night"},{"id":"g1528","title":"Troilus and Cressida"},{"id":"g1529","title":"All's Well That Ends Well"},{"id":"g1530","title":"Measure for Measure"},{"id":"g15303","title":"Coriolan"},{"id":"g1531","title":"Othello"},{"id":"g1532","title":"King Lear"},{"id":"g1533","title":"Macbeth"},{"id":"g1534","title":"Antony and Cleopatra"},{"id":"g1535","title":"Coriolanus"},{"id":"g1536","title":"Timon of Athens"},{"id":"g1537","title":"Pericles, Prince of Tyre"},{"id":"g1538","title":"Cymbeline"},{"id":"g1539","title":"The Winter's Tale"},{"id":"g1540","title":"The Tempest"},{"id":"g1541","title":"King Henry VIII"},{"id":"g1543","title":"A Lover's Complaint"},{"id":"g1544","title":"The Passionate Pilgrim"},{"id":"g1545","title":"Mucedorus"},{"id":"g1546","title":"Sonnets on Sundry Notes of Music"},{"id":"g1547","title":"Sir Thomas More"},{"id":"g1548","title":"Locrine"},{"id":"g15632","title":"Hamlet"},{"id":"g15643","title":"Romeo ja Julia"},{"id":"g15846","title":"Beaucoup de Bruit pour Rien"},{"id":"g15847","title":"Jules César"}],"total":330,"hasMore":true,"cursor":"g15847"},"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 101 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"authorId":"ga56"},"page":{"first":50,"after":"g15847"}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 1611 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g15848","title":"La Comédie des Méprises"},{"id":"g15849","title":"Timon d'Athènes"},{"id":"g15942","title":"Antoine et Cléopâtre"},{"id":"g16128","title":"Le Jour des Rois"},{"id":"g16490","title":"Kuningas Lear"},{"id":"g16618","title":"Antonius ja Cleopatra"},{"id":"g16710","title":"Les Deux Gentilshommes de Vérone"},{"id":"g16893","title":"Macbeth"},{"id":"g17046","title":"Les alegres comares de Windsor"},{"id":"g1736","title":"Thomas Lord Cromwell"},{"id":"g17529","title":"Othello"},{"id":"g1765","title":"King Henry VI, Part 1"},{"id":"g1768","title":"King Richard III"},{"id":"g17686","title":"Troilus ja Cressida"},{"id":"g1769","title":"The Comedy of Errors"},{"id":"g1770","title":"King Edward III"},{"id":"g1771","title":"Titus Andronicus"},{"id":"g1772","title":"The Taming of the Shrew"},{"id":"g1773","title":"The Two Gentlemen of Verona"},{"id":"g1774","title":"Love's Labour's Lost"},{"id":"g1775","title":"King John"},{"id":"g1776","title":"King Richard II"},{"id":"g1777","title":"Romeo and Juliet"},{"id":"g1778","title":"A Midsummer Night's Dream"},{"id":"g1779","title":"The Merchant of Venice"},{"id":"g1780","title":"King Henry IV, Part 1"},{"id":"g1781","title":"The Merry Wives of Windsor"},{"id":"g1782","title":"King Henry IV, Part 2"},{"id":"g1783","title":"Much Ado About Nothing"},{"id":"g1784","title":"King Henry V"},{"id":"g1785","title":"Julius Caesar"},{"id":"g1786","title":"As You Like It"},{"id":"g1787","title":"Hamlet"},{"id":"g1788","title":"Sir John Oldcastle"},{"id":"g1790","title":"Troilus and Cressida"},{"id":"g1791","title":"All's Well That Ends Well"},{"id":"g1792","title":"Measure for Measure"},{"id":"g1793","title":"Othello"},{"id":"g17930","title":"Le songe d'une nuit d'été"},{"id":"g1794","title":"King Lear"},{"id":"g1795","title":"Macbeth"},{"id":"g1796","title":"Antony and Cleopatra"},{"id":"g1797","title":"Coriolanus"},{"id":"g1798","title":"Timon of Athens"},{"id":"g1799","title":"Cymbeline"},{"id":"g1800","title":"The Winter's Tale"},{"id":"g1801","title":"The Tempest"},{"id":"g1802","title":"King Henry VIII"},{"id":"g18143","title":"Roméo et Juliette: Tragédie"},{"id":"g18144","title":"Timon Ateenalainen"}],"total":330,"hasMore":true,"cursor":"g18144"},"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 101 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"authorId":"ga56"},"page":{"first":50,"after":"g18144"}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 1640 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g18162","title":"Comme il vous plaira"},{"id":"g18169","title":"Mesure pour mesure"},{"id":"g18179","title":"Othello"},{"id":"g18311","title":"Le conte d'hiver"},{"id":"g18312","title":"Le roi Lear"},{"id":"g18313","title":"Troïlus et Cressida"},{"id":"g18512","title":"Julius Caesar"},{"id":"g19201","title":"Cymbeline: Tragédie"},{"id":"g19219","title":"La méchante femme mise à la raison: Comédie"},{"id":"g19227","title":"Peines d'amour perdues: Comédie"},{"id":"g19228","title":"Périclès: Tragédie"},{"id":"g20188","title":"Coriolanus"},{"id":"g20720","title":"Les joyeuses Bourgeoises de Windsor"},{"id":"g20773","title":"Le marchand de Venise"},{"id":"g21100","title":"Titus Andronicus"},{"id":"g21277","title":"La vie et la mort du roi Richard II"},{"id":"g21856","title":"Le roi Jean"},{"id":"g22045","title":"La festa dels reis: Lo que vulgueu"},{"id":"g2235","title":"The Tempest"},{"id":"g2236","title":"The Two Gentlemen of Verona"},{"id":"g2237","title":"The Merry Wives of Windsor"},{"id":"g2238","title":"Measure for Measure"},{"id":"g2239","title":"The Comedy of Errors"},{"id":"g2240","title":"Much Ado about Nothing"},{"id":"g2241","title":"Love's Labour's Lost"},{"id":"g2242","title":"A Midsummer Night's Dream"},{"id":"g2243","title":"The Merchant of Venice"},{"id":"g2244","title":"As You Like It"},{"id":"g2245","title":"The Taming of the Shrew"},{"id":"g2246","title":"All's Well That Ends Well"},{"id":"g2247","title":"Twelfth Night"},{"id":"g2248","title":"The Winter's Tale"},{"id":"g2249","title":"King John"},{"id":"g2250","title":"King Richard II"},{"id":"g2251","title":"King Henry IV, Part 1"},{"id":"g2252","title":"King Henry IV, Part 2"},{"id":"g2253","title":"King Henry V"},{"id":"g2254","title":"King Henry VI, Part 1"},{"id":"g2255","title":"King Henry VI, Part 2"},{"id":"g22556","title":"Cymbeline"},{"id":"g2256","title":"King Henry VI, Part 3"},{"id":"g2257","title":"King Richard III"},{"id":"g2258","title":"King Henry VIII"},{"id":"g2259","title":"Coriolanus"},{"id":"g2260","title":"Titus Andronicus"},{"id":"g2261","title":"Romeo and Juliet"},{"id":"g2262","title":"Timon of Athens"},{"id":"g2263","title":"Julius Caesar"},{"id":"g2264","title":"Macbeth"},{"id":"g2265","title":"Hamlet"}],"total":330,"hasMore":true,"cursor":"g2265"},"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 100 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"authorId":"ga56"},"page":{"first":50,"after":"g2265"}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 2453 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g2266","title":"King Lear"},{"id":"g2267","title":"Othello"},{"id":"g2268","title":"Antony and Cleopatra"},{"id":"g2269","title":"Cymbeline"},{"id":"g2270","title":"Shakespeare's First Folio"},{"id":"g22760","title":"Henri IV (1re partie)"},{"id":"g22791","title":"King Henry V: Arranged for Representation at the Princess's Theatre"},{"id":"g23041","title":"The Works of William Shakespeare [Cambridge Edition] [Vol. 1 of 9]: Introduction and Publisher's Advertising"},{"id":"g23042","title":"The Tempest: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"},{"id":"g23043","title":"Two Gentlemen of Verona: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"},{"id":"g23044","title":"The Merry Wives of Windsor: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"},{"id":"g23045","title":"Measure for Measure: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"},{"id":"g23046","title":"The Comedy of Errors: The Works of William Shakespeare [Cambridge Edition] [9 vols.]"},{"id":"g23676","title":"Titus Andronicus"},{"id":"g25667","title":"Hamlet: Drama em cinco Actos"},{"id":"g25694","title":"Venus et Adonis"},{"id":"g25707","title":"Titus Andronicus"},{"id":"g25715","title":"Henri IV (2e partie)"},{"id":"g25843","title":"De Klucht der Vergissingen"},{"id":"g26169","title":"La Tempesta"},{"id":"g26594","title":"Twee Edellieden van Verona"},{"id":"g26757","title":"La mort de Lucrèce"},{"id":"g26758","title":"La plainte d'une amante"},{"id":"g26759","title":"La vie et la mort du roi Richard III"},{"id":"g26762","title":"Henri V"},{"id":"g26763","title":"Henri VI (1/3)"},{"id":"g26764","title":"Henri VI (2/3)"},{"id":"g26765","title":"Henri VI (3/3)"},{"id":"g26766","title":"Henri VIII"},{"id":"g27062","title":"Romeo i Julia: Tragedya w 5 Aktach"},{"id":"g27191","title":"Sonnets. Volume 8"},{"id":"g27536","title":"El Marxant de Venecia"},{"id":"g27708","title":"Loppiaisaatto eli Miten mielitte"},{"id":"g27761","title":"Hamlet"},{"id":"g28150","title":"Le Pèlerin amoureux"},{"id":"g28151","title":"Tout est bien qui finit bien"},{"id":"g28334","title":"The New Hudson Shakespeare: Julius Cæsar"},{"id":"g28965","title":"Kuningas Juhana"},{"id":"g29359","title":"De Koopman van Venetië: Drama in vijf bedrijven"},{"id":"g30790","title":"Kuningas Richard Toinen"},{"id":"g31126","title":"Een Midzomernachtdroom"},{"id":"g31405","title":"Η τρικυμία"},{"id":"g31797","title":"Αμλέτος"},{"id":"g31808","title":"Σαικσπείρου Τραγωδίαι : Μέρος Α'. Ρωμαίος και Ιουλιέτα"},{"id":"g32305","title":"Σαικσπήρου Δράματα, Ο Βασιλιάς Ληρ"},{"id":"g32797","title":"Οθέλλος: Σαικσπείρου Τραγωδίαι Μέρος Β'"},{"id":"g33961","title":"Αντώνιος και Κλεοπάτρα: Τραγωδία εις πράξεις 5"},{"id":"g34434","title":"Μάκβεθ"},{"id":"g37279","title":"Hamleto, Reĝido de Danujo"},{"id":"g37835","title":"Kuningas Richard Kolmas"}],"total":330,"hasMore":true,"cursor":"g37835"},"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 101 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"authorId":"ga56"},"page":{"first":50,"after":"g37835"}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 2122 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g38901","title":"Twelfth Night"},{"id":"g39557","title":"Kuningas Henrik Neljäs I"},{"id":"g39636","title":"Kuningas Henrik Neljäs II"},{"id":"g39939","title":"Kuningas Henrik Viides"},{"id":"g40070","title":"Kuningas Henrik Kuudes I"},{"id":"g40115","title":"Kuningas Henrik Kuudes II"},{"id":"g40174","title":"Kuningas Henrik Kuudes III"},{"id":"g4031","title":"The London Prodigal"},{"id":"g4214","title":"The Puritan Widow"},{"id":"g4255","title":"A Yorkshire Tragedy"},{"id":"g42873","title":"Kuningas Henrik Kahdeksas"},{"id":"g42898","title":"Paljo melua tyhjästä"},{"id":"g42966","title":"Kuinka äkäpussi kesytetään"},{"id":"g43440","title":"Arden of Feversham"},{"id":"g43532","title":"Miten haluatte"},{"id":"g44158","title":"Hairauksia"},{"id":"g44580","title":"Loppu hyvä, kaikki hyvä"},{"id":"g44602","title":"Turhaa lemmen touhua"},{"id":"g44825","title":"Verta verrasta"},{"id":"g44826","title":"Iloiset Windsorin rouvat"},{"id":"g44831","title":"Kesäyön unelma"},{"id":"g44832","title":"Venetian kauppias"},{"id":"g44839","title":"Kaksi nuorta veronalaista"},{"id":"g44840","title":"Talvinen tarina"},{"id":"g44845","title":"Myrsky"},{"id":"g45128","title":"The Works of William Shakespeare [Cambridge Edition] [Vol. 2 of 9]"},{"id":"g46768","title":"Julius Cæsar"},{"id":"g47518","title":"The Tempest"},{"id":"g47715","title":"The Works of William Shakespeare [Cambridge Edition] [Vol. 7 of 9]"},{"id":"g4774","title":"The Merry Devil of Edmonton"},{"id":"g47913","title":"Makbeto"},{"id":"g47960","title":"Romeo and Juliet"},{"id":"g48386","title":"Veel Gemin, geen Gewin"},{"id":"g49007","title":"The Works of William Shakespeare [Cambridge Edition] [Vol. 6 of 9]"},{"id":"g49008","title":"The Works of William Shakespeare [Cambridge Edition] [Vol. 8 of 9]"},{"id":"g49297","title":"The Works of William Shakespeare [Cambridge Edition] [Vol. 5 of 9]"},{"id":"g49880","title":"Romeo en Julia"},{"id":"g50095","title":"The Works of William Shakespeare [Cambridge Edition] [Vol. 4 of 9]"},{"id":"g50559","title":"The Works of William Shakespeare [Cambridge Edition] [Vol. 3 of 9]"},{"id":"g51138","title":"De Koopman van Venetië"},{"id":"g5137","title":"Fair Em"},{"id":"g51691","title":"De getemde feeks"},{"id":"g53207","title":"Dramas de Guillermo Shakspeare [vol. 1]"},{"id":"g55662","title":"Koning Jan"},{"id":"g56454","title":"Hamlet: Drama en cinco actos"},{"id":"g56851","title":"Shakspeare's Mental Photographs"},{"id":"g59686","title":"Dramas de Guillermo Shakspeare [vol. 4]"},{"id":"g61103","title":"Kiel plaĉas al vi: komedio en kvin aktoj"},{"id":"g63367","title":"Koning Hendrik de Vierde"},{"id":"g63368","title":"Koning Richard de Tweede"}],"total":330,"hasMore":true,"cursor":"g63368"},"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 101 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"filter":{"authorId":"ga56"},"page":{"first":50,"after":"g63368"}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 1308 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g64102","title":"Flowers from Shakespeare's Garden: A Posy from the Plays"},{"id":"g67635","title":"Koning Hendrik de Vijfde"},{"id":"g6924","title":"Richard III"},{"id":"g6975","title":"Macbeth"},{"id":"g6990","title":"Coriolanus"},{"id":"g6996","title":"Romeo und Julia"},{"id":"g7022","title":"Ein Sommernachtstraum"},{"id":"g7041","title":"Wie es Euch gefällt"},{"id":"g7043","title":"Der Kaufmann von Venedig"},{"id":"g71836","title":"La ventego de Shakespeare"},{"id":"g7185","title":"Othello"},{"id":"g7186","title":"Was ihr wollt"},{"id":"g7225","title":"Die Irrungen, oder die Doppelten Zwillinge"},{"id":"g7226","title":"Timon von Athen"},{"id":"g7232","title":"Romeo und Juliette"},{"id":"g7233","title":"Maaß für Maaß: Wie einer mißt, so wird ihm wieder gemessen"},{"id":"g7236","title":"Der Sturm, oder Die bezauberte Insel"},{"id":"g7240","title":"Das Leben und der Tod des Königs Lear"},{"id":"g7264","title":"Ein St.-Johannis-Nachts-Traum"},{"id":"g7269","title":"Macbeth"},{"id":"g7276","title":"Hamlet, Prinz von Dännemark"},{"id":"g7292","title":"Leben und Tod des Königs Johann"},{"id":"g7323","title":"Leben und Tod Königs Richard des zweyten"},{"id":"g75268","title":"Koning Hendrik de Zesde"},{"id":"g76912","title":"Koning Richard de Derde"},{"id":"g76946","title":"De vroolijke vrouwtjes van Windsor"},{"id":"g7933","title":"König Heinrich der vierte. Der Erste Theil"},{"id":"g7934","title":"König Heinrich der vierte. Der Zweyte Theil, der seinen Tod, und die Crönung von Heinrich dem fünften enthält."},{"id":"g9077","title":"Hamlet: The First ('Bad') Quarto"},{"id":"g9875","title":"Julius Caesar"}],"total":330,"hasMore":false,"cursor":"g9875"},"fin":true}

List of 200 real books with author names

Rayfold ahead

Measured: author lookups at the backend (author lookups with straightforward code, lower is better)

RESTREST: 148 author lookups with straightforward code148GraphQLGraphQL: 200 author lookups with straightforward code200RayfoldRayfold: 1 author lookups with straightforward code1
REST
148: one request per distinct author after the list (149 requests, 44476 B)
GraphQL
200 with the obvious resolver; 1 with a hand-written DataLoader (both measured; 1 request, 10291 B)
Rayfold
1: a batch loader is the only resolver shape (1 request, 10338 B)

The first 200 books by id (the seed's 4, then g1, g10, g100, ...) have 148 distinct authors, every name checked against the catalogue. GraphQL and Rayfold select id and author name; with the title as well, Rayfold's static cost for a 200-row page crosses its default budget (see the cost row)

See the real requests and responses (152)

REST 149 requests

GET /books?limit=200
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "89cce95b934076be"

{"items":[{"id":"b1","title":"The Dispossessed","format":"PAPERBACK","price":"12.99","stock":5,"authorId":"a1","ownerId":"u1"},{"id":"b2","title":"Invisible Cities","format":"HARDCOVER","price":"19.50","stock":2,"authorId":"a2","ownerId":"u2"},{"id":"b3","title":"Kindred","format":"EBOOK","price":"8.00","stock":100,"authorId":"a3","ownerId":"u1"},{"id":"b4","title":"A Wizard of Earthsea","format":"PAPERBACK","price":"9.99","stock":0,"authorId":"a1","ownerId":"u1"},{"id":"g1","title":"The Declaration of Independence of the United States of America","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1","ownerId":"gutenberg"},{"id":"g10","title":"The King James Version of the Bible","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga0","ownerId":"gutenberg"},{"id":"g100","title":"The Complete Works of William Shakespeare","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1000","title":"La Divina Commedia di Dante: Complete","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga436","ownerId":"gutenberg"},{"id":"g10000","title":"The Magna Carta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga67","ownerId":"gutenberg"},{"id":"g10001","title":"Apocolocyntosis","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1105","ownerId":"gutenberg"},{"id":"g10002","title":"The House on the Borderland","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2627","ownerId":"gutenberg"},{"id":"g10003","title":"My First Years as a Frenchwoman, 1876-1879","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2628","ownerId":"gutenberg"},{"id":"g10004","title":"The Warriors","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2629","ownerId":"gutenberg"},{"id":"g10005","title":"A Voyage to the Moon: With Some Account of the Manners and Customs, Science and Philosophy, of the People of Morosofia, and Other Lunarians","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2630","ownerId":"gutenberg"},{"id":"g10006","title":"La Fiammetta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1083","ownerId":"gutenberg"},{"id":"g10007","title":"Carmilla","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga242","ownerId":"gutenberg"},{"id":"g10008","title":"The Mystery","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga218","ownerId":"gutenberg"},{"id":"g10009","title":"Wild Northern Scenes; Or, Sporting Adventures with the Rifle and the Rod","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2631","ownerId":"gutenberg"},{"id":"g1001","title":"Divine Comedy, Longfellow's Translation, Hell","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga436","ownerId":"gutenberg"},{"id":"g10010","title":"The Eulogies of Howard: A Vision","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2426","ownerId":"gutenberg"},{"id":"g10011","title":"365 Foreign Dishes: A Foreign Dish for Every Day in the Year","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga35","ownerId":"gutenberg"},{"id":"g10012","title":"The Mountains of California","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga162","ownerId":"gutenberg"},{"id":"g10013","title":"Punchinello, Volume 1, No. 09, May 28, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10014","title":"Punchinello, Volume 1, No. 18, July 30, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10015","title":"Punchinello, Volume 1, No. 19, August 6, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10016","title":"Punchinello, Volume 1, No. 21, August 20, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10017","title":"Punchinello, Volume 1, No. 23, September 3, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10018","title":"Punchinello, Volume 1, No.
... (32908 bytes in full, cut for the report)
GET /authors/a1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "28bbc6e5edb7fc7e"

{
  "id": "a1",
  "name": "Ursula K. Le Guin",
  "bio": "American author of speculative fiction."
}
147 more requests
GET /authors/a2
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "5251786f2bcf4a5b"

{
  "id": "a2",
  "name": "Italo Calvino",
  "bio": null
}
GET /authors/a3
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c7167b1ef1cce231"

{
  "id": "a3",
  "name": "Octavia E. Butler",
  "bio": "Science fiction author from Pasadena."
}
GET /authors/ga1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "4d5919e3577aa038"

{
  "id": "ga1",
  "name": "Thomas Jefferson",
  "bio": "Lived 1743-1826."
}
GET /authors/ga0
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "b303fe9103772e27"

{
  "id": "ga0",
  "name": "Unknown author",
  "bio": null
}
GET /authors/ga56
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "bd82dc785da6bc37"

{
  "id": "ga56",
  "name": "William Shakespeare",
  "bio": "Lived 1564-1616."
}
GET /authors/ga436
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "31085d15591b3e02"

{
  "id": "ga436",
  "name": "Dante Alighieri",
  "bio": "Lived 1265-1321."
}
GET /authors/ga67
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "46a6c1d82d99bc9d"

{
  "id": "ga67",
  "name": "Anonymous",
  "bio": null
}
GET /authors/ga1105
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "978cfb1f609238e6"

{
  "id": "ga1105",
  "name": "Lucius Annaeus Seneca",
  "bio": "Lived 5? BCE-65."
}
GET /authors/ga2627
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "9cf2e248e9e0d912"

{
  "id": "ga2627",
  "name": "William Hope Hodgson",
  "bio": "Lived 1877-1918."
}
GET /authors/ga2628
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "113cb91f3d5d961b"

{
  "id": "ga2628",
  "name": "Mary King Waddington",
  "bio": "Lived 1833-1923."
}
GET /authors/ga2629
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "09312bf98e579719"

{
  "id": "ga2629",
  "name": "Anna Robertson Brown Lindsay",
  "bio": "Lived 1864-1948."
}
GET /authors/ga2630
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "f0b99eb6ad35b8b2"

{
  "id": "ga2630",
  "name": "George Tucker",
  "bio": "Lived 1775-1861."
}
GET /authors/ga1083
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "92bc0e649d949fcd"

{
  "id": "ga1083",
  "name": "Giovanni Boccaccio",
  "bio": "Lived 1313-1375."
}
GET /authors/ga242
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "541fa04e022ae5bb"

{
  "id": "ga242",
  "name": "Joseph Sheridan Le Fanu",
  "bio": "Lived 1814-1873."
}
GET /authors/ga218
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "7e435d0eb3f0238d"

{
  "id": "ga218",
  "name": "Stewart Edward White",
  "bio": "Lived 1873-1946."
}
GET /authors/ga2631
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "214786b1a2de339a"

{
  "id": "ga2631",
  "name": "S. H. Hammond",
  "bio": "Lived 1809-1878."
}
GET /authors/ga2426
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "3f48ce3d19c00e02"

{
  "id": "ga2426",
  "name": "William Hayley",
  "bio": "Lived 1745-1820."
}
GET /authors/ga35
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c053634baf1530f4"

{
  "id": "ga35",
  "name": "Unknown",
  "bio": null
}
GET /authors/ga162
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "710c3fdce08b26f1"

{
  "id": "ga162",
  "name": "John Muir",
  "bio": "Lived 1838-1914."
}
GET /authors/ga104
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "b6e9e5ca3ebf78bc"

{
  "id": "ga104",
  "name": "Various",
  "bio": null
}
GET /authors/ga2549
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "2ae4addb91dcbdf5"

{
  "id": "ga2549",
  "name": "Ada Leverson",
  "bio": "Lived 1862-1933."
}
GET /authors/ga2632
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "82c6d8cbd0e968b5"

{
  "id": "ga2632",
  "name": "A. J. Bueltmann",
  "bio": null
}
GET /authors/ga2633
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "4dcbaf3ddd6f2ed7"

{
  "id": "ga2633",
  "name": "Charles S. Brooks",
  "bio": "Lived 1878-1934."
}
GET /authors/ga2634
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "e32b5b8841f66ae5"

{
  "id": "ga2634",
  "name": "F. J. Cross",
  "bio": null
}
GET /authors/ga2572
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "a44f9a691feb7d78"

{
  "id": "ga2572",
  "name": "Fannie Hurst",
  "bio": "Lived 1889-1968."
}
GET /authors/ga2635
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8fca796b12b8d6d9"

{
  "id": "ga2635",
  "name": "Harold Avery",
  "bio": "Lived 1867-1943."
}
GET /authors/ga2636
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "a3761129fc745ddb"

{
  "id": "ga2636",
  "name": "John B. Foster",
  "bio": "Lived 1863-1941."
}
GET /authors/ga2637
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "a39351eaf1da9393"

{
  "id": "ga2637",
  "name": "William Magnay, Sir",
  "bio": "Lived 1855-1917."
}
GET /authors/ga2638
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "04c096906632f076"

{
  "id": "ga2638",
  "name": "Buffalo Bill",
  "bio": "Lived 1846-1917."
}
GET /authors/ga415
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "a56065fe98d63fa8"

{
  "id": "ga415",
  "name": "Edgar Allan Poe",
  "bio": "Lived 1809-1849."
}
GET /authors/ga2639
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "41cce6cfaedc9802"

{
  "id": "ga2639",
  "name": "Edith Ferguson Black",
  "bio": "Lived 1857-1936."
}
GET /authors/ga2640
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "382ce03bcf0b61fd"

{
  "id": "ga2640",
  "name": "Elizabeth Robins",
  "bio": "Lived 1862-1952."
}
GET /authors/ga2289
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "f6fd0088c2237daa"

{
  "id": "ga2289",
  "name": "Aphra Behn",
  "bio": "Lived 1640-1689."
}
GET /authors/ga2641
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "5debafe128f2a4f1"

{
  "id": "ga2641",
  "name": "Charles A. Lee",
  "bio": null
}
GET /authors/ga148
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "22392294cb5a2f19"

{
  "id": "ga148",
  "name": "James Branch Cabell",
  "bio": "Lived 1879-1958."
}
GET /authors/ga2642
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "6cca101db2ee0124"

{
  "id": "ga2642",
  "name": "E. R. Murray",
  "bio": "Lived 1861-1932."
}
GET /authors/ga2643
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "27d87628dbe72f45"

{
  "id": "ga2643",
  "name": "Joseph Ladue",
  "bio": "Lived 1855-1900."
}
GET /authors/ga845
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "1fd09bc9a2c8acf1"

{
  "id": "ga845",
  "name": "William Wood",
  "bio": "Lived 1864-1947."
}
GET /authors/ga1706
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "86bd93a24455b7bb"

{
  "id": "ga1706",
  "name": "H. Irving Hancock",
  "bio": "Lived 1868-1922."
}
GET /authors/ga253
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c6a2a44736fda200"

{
  "id": "ga253",
  "name": "John Buchan",
  "bio": "Lived 1875-1940."
}
GET /authors/ga2644
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "7f1a0e044000eb06"

{
  "id": "ga2644",
  "name": "Janet D. Wheeler",
  "bio": null
}
GET /authors/ga826
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "71c566f811473a3d"

{
  "id": "ga826",
  "name": "Mrs. Oliphant",
  "bio": "Lived 1828-1897."
}
GET /authors/ga2645
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "bdc1fe5a8bf029fd"

{
  "id": "ga2645",
  "name": "Paul Féval",
  "bio": "Lived 1817-1887."
}
GET /authors/ga2646
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8d12a3f6be3127f2"

{
  "id": "ga2646",
  "name": "Jöns Jakob Berzelius, friherre",
  "bio": "Lived 1779-1848."
}
GET /authors/ga849
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "dd744fc15e5ad05a"

{
  "id": "ga849",
  "name": "Gotthold Ephraim Lessing",
  "bio": "Lived 1729-1781."
}
GET /authors/ga1001
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "603310143a316d57"

{
  "id": "ga1001",
  "name": "Confucius",
  "bio": "Lived 552 BCE-480 BCE."
}
GET /authors/ga54
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8e8f48a4a97c19c3"

{
  "id": "ga54",
  "name": "Anthony Hope",
  "bio": "Lived 1863-1933."
}
GET /authors/ga2647
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "87cdc278ca5a8108"

{
  "id": "ga2647",
  "name": "Edward J. Quigley",
  "bio": null
}
GET /authors/ga34
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "f59893c05e199a56"

{
  "id": "ga34",
  "name": "L. Frank Baum",
  "bio": "Lived 1856-1919."
}
GET /authors/ga515
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "43edef71691d0b61"

{
  "id": "ga515",
  "name": "Thomas Henry Huxley",
  "bio": "Lived 1825-1895."
}
GET /authors/ga2648
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "4aea14fabd6ac185"

{
  "id": "ga2648",
  "name": "Emile Verhaeren",
  "bio": "Lived 1855-1916."
}
GET /authors/ga2649
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "13a561d4a62c7136"

{
  "id": "ga2649",
  "name": "Henry F. Keenan",
  "bio": "Lived 1850-1928."
}
GET /authors/ga2650
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c701080c6ce48d49"

{
  "id": "ga2650",
  "name": "Elizabeth Towne",
  "bio": "Lived 1865-1960."
}
GET /authors/ga678
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c880be028d7a2975"

{
  "id": "ga678",
  "name": "Jeffery Farnol",
  "bio": "Lived 1878-1952."
}
GET /authors/ga2651
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "e1c26e7bfdd1830f"

{
  "id": "ga2651",
  "name": "James M. Beck",
  "bio": "Lived 1861-1936."
}
GET /authors/ga639
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "fa55ca84a7a36195"

{
  "id": "ga639",
  "name": "Max Brand",
  "bio": "Lived 1892-1944."
}
GET /authors/ga840
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "a734cce24254120e"

{
  "id": "ga840",
  "name": "Burton Egbert Stevenson",
  "bio": "Lived 1872-1962."
}
GET /authors/ga2652
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8821fdee21062e6a"

{
  "id": "ga2652",
  "name": "Grace MacGowan Cooke",
  "bio": "Lived 1863-1944."
}
GET /authors/ga2653
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "40eb169ee24181f0"

{
  "id": "ga2653",
  "name": "Joseph Planta",
  "bio": "Lived 1744-1827."
}
GET /authors/ga2654
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "f394003d5cdd9cad"

{
  "id": "ga2654",
  "name": "Edward Eggleston",
  "bio": "Lived 1837-1902."
}
GET /authors/ga2655
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "7a641b6b49a79a4f"

{
  "id": "ga2655",
  "name": "S. M. Edwardes",
  "bio": "Lived 1873-1927."
}
GET /authors/ga2656
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "41c5d06d95747b4c"

{
  "id": "ga2656",
  "name": "Elizabeth Moxon",
  "bio": null
}
GET /authors/ga2657
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "2ffe68ba8fc3a28b"

{
  "id": "ga2657",
  "name": "Garland Greever",
  "bio": "Lived 1883-1967."
}
GET /authors/ga2658
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d92396e767e51a17"

{
  "id": "ga2658",
  "name": "Venture Smith",
  "bio": "Lived 1729?-1805."
}
GET /authors/ga1065
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "436e8c89cbfa335d"

{
  "id": "ga1065",
  "name": "Harold Bindloss",
  "bio": "Lived 1866-1945."
}
GET /authors/ga2659
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "3fb7f708c75daa1c"

{
  "id": "ga2659",
  "name": "Douglas Wilson Johnson",
  "bio": "Lived 1878-1944."
}
GET /authors/ga2660
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "7298ba0377187a17"

{
  "id": "ga2660",
  "name": "Harriot Stanton Blatch",
  "bio": "Lived 1856-1940."
}
GET /authors/ga1619
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "ccc5a983a5ede1ce"

{
  "id": "ga1619",
  "name": "Clair W. Hayes",
  "bio": "Born 1887."
}
GET /authors/ga2661
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8fcee220ad508542"

{
  "id": "ga2661",
  "name": "John R. Watson",
  "bio": "Born 1872."
}
GET /authors/ga465
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d9cb081d977236ce"

{
  "id": "ga465",
  "name": "Anna Katharine Green",
  "bio": "Lived 1846-1935."
}
GET /authors/ga1254
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "234b2ef90f29a45a"

{
  "id": "ga1254",
  "name": "James Oliver Curwood",
  "bio": "Lived 1878-1927."
}
GET /authors/ga2662
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d719fa489d743a79"

{
  "id": "ga2662",
  "name": "René Basset",
  "bio": "Lived 1855-1924."
}
GET /authors/ga1212
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "6b419ecc4f29b4ca"

{
  "id": "ga1212",
  "name": "James Otis",
  "bio": "Lived 1848-1912."
}
GET /authors/ga2663
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "65030c107626ae87"

{
  "id": "ga2663",
  "name": "Louise Forsslund",
  "bio": "Lived 1873-1910."
}
GET /authors/ga2664
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "35cdc0485bfe17ea"

{
  "id": "ga2664",
  "name": "Oxonian",
  "bio": null
}
GET /authors/ga2665
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "7806196602db4907"

{
  "id": "ga2665",
  "name": "Donald A. Mackenzie",
  "bio": "Lived 1873-1936."
}
GET /authors/ga2666
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "2920d0e5ec83ff7d"

{
  "id": "ga2666",
  "name": "Francesco Saverio Nitti",
  "bio": "Lived 1868-1953."
}
GET /authors/ga114
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "959f236b3607f95a"

{
  "id": "ga114",
  "name": "George MacDonald",
  "bio": "Lived 1824-1905."
}
GET /authors/ga2667
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "04f958d29a3096f3"

{
  "id": "ga2667",
  "name": "Richard Garnett",
  "bio": "Lived 1835-1906."
}
GET /authors/ga1418
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "f869c3a895d123c3"

{
  "id": "ga1418",
  "name": "Euripides",
  "bio": "Lived 481? BCE-407 BCE."
}
GET /authors/ga575
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "ee6adb1e70178006"

{
  "id": "ga575",
  "name": "Edward Carpenter",
  "bio": "Lived 1844-1929."
}
GET /authors/ga2668
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "09a162eac81c8427"

{
  "id": "ga2668",
  "name": "W. T. Massey",
  "bio": null
}
GET /authors/ga2217
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "cb0a1fb505ac6efe"

{
  "id": "ga2217",
  "name": "Humphry Ward, Mrs.",
  "bio": "Lived 1851-1920."
}
GET /authors/ga57
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "a03c4c6e927cdedb"

{
  "id": "ga57",
  "name": "Bruce Sterling",
  "bio": "Born 1954."
}
GET /authors/ga2548
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "63f35149089883cc"

{
  "id": "ga2548",
  "name": "John Nichol",
  "bio": "Lived 1833-1894."
}
GET /authors/ga418
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "69af0382313351a5"

{
  "id": "ga418",
  "name": "W. H. Hudson",
  "bio": "Lived 1841-1922."
}
GET /authors/ga1307
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "e9e0be314167b32a"

{
  "id": "ga1307",
  "name": "William Le Queux",
  "bio": "Lived 1864-1927."
}
GET /authors/ga2593
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c34d008a5e1420e8"

{
  "id": "ga2593",
  "name": "Rossiter Johnson",
  "bio": "Lived 1840-1931."
}
GET /authors/ga2669
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c2cb160face59c46"

{
  "id": "ga2669",
  "name": "Hugh Dalton Dalton, Baron",
  "bio": "Lived 1887-1962."
}
GET /authors/ga2670
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "a6ebbcd8e458f307"

{
  "id": "ga2670",
  "name": "John P. Marquand",
  "bio": "Lived 1893-1960."
}
GET /authors/ga1375
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8c328c9f7cade1b8"

{
  "id": "ga1375",
  "name": "Louis Tracy",
  "bio": "Lived 1863-1928."
}
GET /authors/ga2671
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "68532f7b1d307b0a"

{
  "id": "ga2671",
  "name": "Kate Dickinson Sweetser",
  "bio": "Lived 1870-1939."
}
GET /authors/ga448
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8daff9a95a6684be"

{
  "id": "ga448",
  "name": "John Fiske",
  "bio": "Lived 1842-1901."
}
GET /authors/ga2672
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "f056bbb87a6e159c"

{
  "id": "ga2672",
  "name": "E. D'Oliveira",
  "bio": "Lived 1886-1944."
}
GET /authors/ga2366
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "7b056c412e19f54b"

{
  "id": "ga2366",
  "name": "Alice Morse Earle",
  "bio": "Lived 1851-1911."
}
GET /authors/ga303
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8c9f1170f78ba0db"

{
  "id": "ga303",
  "name": "Charles Kingsley",
  "bio": "Lived 1819-1875."
}
GET /authors/ga2561
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "5649cd08966ebe8d"

{
  "id": "ga2561",
  "name": "Viktor Rydberg",
  "bio": "Lived 1828-1895."
}
GET /authors/ga2673
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d065c120baf7e8a5"

{
  "id": "ga2673",
  "name": "T. F. Thiselton-Dyer",
  "bio": "Lived 1848-1923."
}
GET /authors/ga1288
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "e811248547b2ad81"

{
  "id": "ga1288",
  "name": "Percy Bysshe Shelley",
  "bio": "Lived 1792-1822."
}
GET /authors/ga2674
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "850d9b3d304cde84"

{
  "id": "ga2674",
  "name": "Edward Hutton",
  "bio": "Lived 1875-1969."
}
GET /authors/ga2356
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "92d65ce278cea8c4"

{
  "id": "ga2356",
  "name": "Epiphanius Wilson",
  "bio": "Lived 1845-1916."
}
GET /authors/ga546
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "b8a1fa007edbc559"

{
  "id": "ga546",
  "name": "Robert Graves",
  "bio": "Lived 1895-1985."
}
GET /authors/ga260
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "15c55d5e96e60221"

{
  "id": "ga260",
  "name": "Charles Lamb",
  "bio": "Lived 1775-1834."
}
GET /authors/ga2675
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "6f7d914c07ca7725"

{
  "id": "ga2675",
  "name": "Edwin Waugh",
  "bio": "Lived 1817-1890."
}
GET /authors/ga2487
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d31d88a5150a5d8f"

{
  "id": "ga2487",
  "name": "Robert J. Evans",
  "bio": null
}
GET /authors/ga24
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c384914cd4b092f1"

{
  "id": "ga24",
  "name": "H. G. Wells",
  "bio": "Lived 1866-1946."
}
GET /authors/ga1108
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "173b3cdf7d580eed"

{
  "id": "ga1108",
  "name": "Henry Seton Merriman",
  "bio": "Lived 1862-1903."
}
GET /authors/ga511
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "5ae9712310e9ae70"

{
  "id": "ga511",
  "name": "Arthur Quiller-Couch",
  "bio": "Lived 1863-1944."
}
GET /authors/ga2676
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "30a63a727879d7bd"

{
  "id": "ga2676",
  "name": "Dan B. Brummitt",
  "bio": "Lived 1867-1939."
}
GET /authors/ga2677
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "b2feec879e6174bb"

{
  "id": "ga2677",
  "name": "W. J. Dawson",
  "bio": "Lived 1854-1928."
}
GET /authors/ga2678
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8eec548387cbb23d"

{
  "id": "ga2678",
  "name": "Mrs. Beeton",
  "bio": "Lived 1836-1865."
}
GET /authors/ga2679
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "763ec1c1bcebf299"

{
  "id": "ga2679",
  "name": "George Tyrrell",
  "bio": "Lived 1861-1909."
}
GET /authors/ga245
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d5de745129e439f5"

{
  "id": "ga245",
  "name": "B. M. Bower",
  "bio": "Lived 1871-1940."
}
GET /authors/ga2680
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "f2e0f91645eacb10"

{
  "id": "ga2680",
  "name": "Donald Lemen Clark",
  "bio": "Lived 1888-1966."
}
GET /authors/ga2681
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "0136ca461f206914"

{
  "id": "ga2681",
  "name": "William Cullen Bryant",
  "bio": "Lived 1794-1878."
}
GET /authors/ga555
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "4498a404597efc6e"

{
  "id": "ga555",
  "name": "Johanna Spyri",
  "bio": "Lived 1827-1901."
}
GET /authors/ga2682
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "4c73fbedc1d8ba6c"

{
  "id": "ga2682",
  "name": "Arnold Toynbee",
  "bio": "Lived 1889-1975."
}
GET /authors/ga2683
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "ae8a4e820c11aff8"

{
  "id": "ga2683",
  "name": "Frank Moore",
  "bio": "Born 1843."
}
GET /authors/ga2684
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "18687e221a5c13ca"

{
  "id": "ga2684",
  "name": "Thomas Herbert Russell",
  "bio": "Lived 1862-1947."
}
GET /authors/ga423
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "34d41a3786ee2eb4"

{
  "id": "ga423",
  "name": "Howard Pyle",
  "bio": "Lived 1853-1911."
}
GET /authors/ga417
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "fe4e5780ead1528d"

{
  "id": "ga417",
  "name": "James Fenimore Cooper",
  "bio": "Lived 1789-1851."
}
GET /authors/ga437
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "12940b40709d697e"

{
  "id": "ga437",
  "name": "Francis Parkman",
  "bio": "Lived 1823-1893."
}
GET /authors/ga172
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "55634e432f38a7b4"

{
  "id": "ga172",
  "name": "Bram Stoker",
  "bio": "Lived 1847-1912."
}
GET /authors/ga167
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "cb5c85f288d2ae7b"

{
  "id": "ga167",
  "name": "Walter Alexander Raleigh, Sir",
  "bio": "Lived 1861-1922."
}
GET /authors/ga409
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "4c54915ba1bd39fe"

{
  "id": "ga409",
  "name": "Benedictus de Spinoza",
  "bio": "Lived 1632-1677."
}
GET /authors/ga651
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "53f2bf5bf8a451e7"

{
  "id": "ga651",
  "name": "Anatole France",
  "bio": "Lived 1844-1924."
}
GET /authors/ga2685
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "08a8755e2f364f6c"

{
  "id": "ga2685",
  "name": "Ernest Bernbaum",
  "bio": "Lived 1879-1958."
}
GET /authors/ga2686
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "bd519bdf79d8535e"

{
  "id": "ga2686",
  "name": "Cassius Dio Cocceianus",
  "bio": "Lived 165?-235?."
}
GET /authors/ga2687
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "30693b099ac75ca9"

{
  "id": "ga2687",
  "name": "C. Snouck Hurgronje",
  "bio": "Lived 1857-1936."
}
GET /authors/ga1240
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8ab13a6499c7e801"

{
  "id": "ga1240",
  "name": "Nellie L. McClung",
  "bio": "Lived 1873-1951."
}
GET /authors/ga2688
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "2e6924faa1411d94"

{
  "id": "ga2688",
  "name": "Percy Greg",
  "bio": "Lived 1836-1889."
}
GET /authors/ga2689
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "ff118532e0ff16d0"

{
  "id": "ga2689",
  "name": "Thomas F. A. Smith",
  "bio": "Born 1875."
}
GET /authors/ga98
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "04ddb45f8a0e696f"

{
  "id": "ga98",
  "name": "Oscar Wilde",
  "bio": "Lived 1854-1900."
}
GET /authors/ga357
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "654ea17fb1d757a8"

{
  "id": "ga357",
  "name": "Charlotte Brontë",
  "bio": "Lived 1816-1855."
}
GET /authors/ga43
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d76a6d7ed85d17b2"

{
  "id": "ga43",
  "name": "Mark Twain",
  "bio": "Lived 1835-1910."
}
GET /authors/ga132
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8f299ec12b4d1532"

{
  "id": "ga132",
  "name": "Amy Lowell",
  "bio": "Lived 1874-1925."
}
GET /authors/ga189
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "03007e3d66c9302d"

{
  "id": "ga189",
  "name": "Zane Grey",
  "bio": "Lived 1872-1939."
}
GET /authors/ga2690
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "52dce3dcbba3ce40"

{
  "id": "ga2690",
  "name": "Maria Mitchell",
  "bio": "Lived 1818-1889."
}
GET /authors/ga207
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "cd95bc42a67e74c4"

{
  "id": "ga207",
  "name": "Vachel Lindsay",
  "bio": "Lived 1879-1931."
}
GET /authors/ga1870
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "329e1d9a8bc5bf35"

{
  "id": "ga1870",
  "name": "Randall Parrish",
  "bio": "Lived 1858-1923."
}
GET /authors/ga1901
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "9658364dfc3c8538"

{
  "id": "ga1901",
  "name": "Lawrence J. Leslie",
  "bio": null
}
GET /authors/ga1652
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "1004808dff441d73"

{
  "id": "ga1652",
  "name": "George W. Peck",
  "bio": "Lived 1840-1916."
}
GET /authors/ga2691
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "491c78849ff1bf91"

{
  "id": "ga2691",
  "name": "Jackson Gregory",
  "bio": "Lived 1882-1943."
}
GET /authors/ga2692
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "a2ae8017cda3453a"

{
  "id": "ga2692",
  "name": "Thomas Taylor",
  "bio": "Lived 1758-1835."
}
GET /authors/ga2693
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "31ec4627961ccb37"

{
  "id": "ga2693",
  "name": "Giuseppe Rovani",
  "bio": "Lived 1818-1874."
}
GET /authors/ga1014
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d272973d9690628e"

{
  "id": "ga1014",
  "name": "Marietta Holley",
  "bio": "Lived 1836-1926."
}
GET /authors/ga180
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d9d9d49389d2c405"

{
  "id": "ga180",
  "name": "Mary Austin",
  "bio": "Lived 1868-1934."
}

GraphQL 2 requests

POST /graphql
content-type: application/json

{
  "query": "{ books(first: 200) { items { id author { name } } } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"b1","author":{"name":"Ursula K. Le Guin"}},{"id":"b2","author":{"name":"Italo Calvino"}},{"id":"b3","author":{"name":"Octavia E. Butler"}},{"id":"b4","author":{"name":"Ursula K. Le Guin"}},{"id":"g1","author":{"name":"Thomas Jefferson"}},{"id":"g10","author":{"name":"Unknown author"}},{"id":"g100","author":{"name":"William Shakespeare"}},{"id":"g1000","author":{"name":"Dante Alighieri"}},{"id":"g10000","author":{"name":"Anonymous"}},{"id":"g10001","author":{"name":"Lucius Annaeus Seneca"}},{"id":"g10002","author":{"name":"William Hope Hodgson"}},{"id":"g10003","author":{"name":"Mary King Waddington"}},{"id":"g10004","author":{"name":"Anna Robertson Brown Lindsay"}},{"id":"g10005","author":{"name":"George Tucker"}},{"id":"g10006","author":{"name":"Giovanni Boccaccio"}},{"id":"g10007","author":{"name":"Joseph Sheridan Le Fanu"}},{"id":"g10008","author":{"name":"Stewart Edward White"}},{"id":"g10009","author":{"name":"S. H. Hammond"}},{"id":"g1001","author":{"name":"Dante Alighieri"}},{"id":"g10010","author":{"name":"William Hayley"}},{"id":"g10011","author":{"name":"Unknown"}},{"id":"g10012","author":{"name":"John Muir"}},{"id":"g10013","author":{"name":"Various"}},{"id":"g10014","author":{"name":"Various"}},{"id":"g10015","author":{"name":"Various"}},{"id":"g10016","author":{"name":"Various"}},{"id":"g10017","author":{"name":"Various"}},{"id":"g10018","author":{"name":"Various"}},{"id":"g10019","author":{"name":"Various"}},{"id":"g1002","author":{"name":"Dante Alighieri"}},{"id":"g10020","author":{"name":"Various"}},{"id":"g10021","author":{"name":"Ada Leverson"}},{"id":"g10022","author":{"name":"A. J. Bueltmann"}},{"id":"g10023","author":{"name":"Charles S. Brooks"}},{"id":"g10024","author":{"name":"F. J. Cross"}},{"id":"g10025","author":{"name":"Fannie Hurst"}},{"id":"g10026","author":{"name":"Various"}},{"id":"g10027","author":{"name":"Harold Avery"}},{"id":"g10028","author":{"name":"John B. Foster"}},{"id":"g10029","author":{"name":"William Magnay, Sir"}},{"id":"g1003","author":{"name":"Dante Alighieri"}},{"id":"g10030","author":{"name":"Buffalo Bill"}},{"id":"g10031","author":{"name":"Edgar Allan Poe"}},{"id":"g10032","author":{"name":"Various"}},{"id":"g10033","author":{"name":"Various"}},{"id":"g10034","author":{"name":"Various"}},{"id":"g10035","author":{"name":"Various"}},{"id":"g10036","author":{"name":"Various"}},{"id":"g10037","author":{"name":"Edith Ferguson Black"}},{"id":"g10038","author":{"name":"Elizabeth Robins"}},{"id":"g10039","author":{"name":"Aphra Behn"}},{"id":"g1004","author":{"name":"Dante Alighieri"}},{"id":"g10040","author":{"name":"Charles A. Lee"}},{"id":"g10041","author":{"name":"James Branch Cabell"}},{"id":"g10042","author":{"name":"E. R. Murray"}},{"id":"g10043","author":{"name":"Joseph Ladue"}},{"id":"g10044","author":{"name":"William Wood"}},{"id":"g10045","author":{"name":"H. Irving Hancock"}},{"id":"g10046","author":{"name":"John Buchan"}},{"id":"g10047","author":{"name":"Various"}},{"id":"g10048","author":{"name":"Janet D. Wheeler"}},{"id":"g10049","author":{"name":"Mrs. Oliphant"}},{"id":"g1005","author":{"name":"Dante Alighieri"}},{"id":"g10050","author":{"name":"Mrs. Oliphant"}},{"id":"g10051","author":{"name":"Mrs. Oliphant"}},{"id":"g10052","author":{"name":"Mrs. Oliphant"}},{"id":"g10053","author":{"name":"Paul Féval"}},{"id":"g10054","author":{"name":"Jöns Jakob Berzelius, friherre"}},{"id":"g10055","author":{"name":"Gotthold Ephraim Lessing"}},{"id":"g10056","author":{"name":"Confucius"}},{"id":"g10057","author":{"name":"Anthony Hope"}},{"id":"g10058","author":{"name":"Edward J. Quigley"}},{"id":"g10059","author":{"name":"L. Frank Baum"}},{"id":"g1006","author":{"name":"Dante Alighieri"}},{"id":"g10060","author":{"name":"Thomas Henry Huxley"}},{"id":"g10061","author":{"name":"Emile Verhaeren"}},{"id":"g10062","author":{"name":"Henry F. Keenan"}},{"id":"g10063","author":{"name":"Elizabeth Towne"}},{"id":"g10064","author":{"name":"Jeffery Farnol"}},{"id":"g10065","author":{"name":"James M. Beck"}},{"id":"g10066","author":{"name":"Max Brand"}},{
... (10202 bytes in full, cut for the report)
POST /graphql
content-type: application/json

{
  "query": "{ books(first: 200) { items { id author { name } } } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"b1","author":{"name":"Ursula K. Le Guin"}},{"id":"b2","author":{"name":"Italo Calvino"}},{"id":"b3","author":{"name":"Octavia E. Butler"}},{"id":"b4","author":{"name":"Ursula K. Le Guin"}},{"id":"g1","author":{"name":"Thomas Jefferson"}},{"id":"g10","author":{"name":"Unknown author"}},{"id":"g100","author":{"name":"William Shakespeare"}},{"id":"g1000","author":{"name":"Dante Alighieri"}},{"id":"g10000","author":{"name":"Anonymous"}},{"id":"g10001","author":{"name":"Lucius Annaeus Seneca"}},{"id":"g10002","author":{"name":"William Hope Hodgson"}},{"id":"g10003","author":{"name":"Mary King Waddington"}},{"id":"g10004","author":{"name":"Anna Robertson Brown Lindsay"}},{"id":"g10005","author":{"name":"George Tucker"}},{"id":"g10006","author":{"name":"Giovanni Boccaccio"}},{"id":"g10007","author":{"name":"Joseph Sheridan Le Fanu"}},{"id":"g10008","author":{"name":"Stewart Edward White"}},{"id":"g10009","author":{"name":"S. H. Hammond"}},{"id":"g1001","author":{"name":"Dante Alighieri"}},{"id":"g10010","author":{"name":"William Hayley"}},{"id":"g10011","author":{"name":"Unknown"}},{"id":"g10012","author":{"name":"John Muir"}},{"id":"g10013","author":{"name":"Various"}},{"id":"g10014","author":{"name":"Various"}},{"id":"g10015","author":{"name":"Various"}},{"id":"g10016","author":{"name":"Various"}},{"id":"g10017","author":{"name":"Various"}},{"id":"g10018","author":{"name":"Various"}},{"id":"g10019","author":{"name":"Various"}},{"id":"g1002","author":{"name":"Dante Alighieri"}},{"id":"g10020","author":{"name":"Various"}},{"id":"g10021","author":{"name":"Ada Leverson"}},{"id":"g10022","author":{"name":"A. J. Bueltmann"}},{"id":"g10023","author":{"name":"Charles S. Brooks"}},{"id":"g10024","author":{"name":"F. J. Cross"}},{"id":"g10025","author":{"name":"Fannie Hurst"}},{"id":"g10026","author":{"name":"Various"}},{"id":"g10027","author":{"name":"Harold Avery"}},{"id":"g10028","author":{"name":"John B. Foster"}},{"id":"g10029","author":{"name":"William Magnay, Sir"}},{"id":"g1003","author":{"name":"Dante Alighieri"}},{"id":"g10030","author":{"name":"Buffalo Bill"}},{"id":"g10031","author":{"name":"Edgar Allan Poe"}},{"id":"g10032","author":{"name":"Various"}},{"id":"g10033","author":{"name":"Various"}},{"id":"g10034","author":{"name":"Various"}},{"id":"g10035","author":{"name":"Various"}},{"id":"g10036","author":{"name":"Various"}},{"id":"g10037","author":{"name":"Edith Ferguson Black"}},{"id":"g10038","author":{"name":"Elizabeth Robins"}},{"id":"g10039","author":{"name":"Aphra Behn"}},{"id":"g1004","author":{"name":"Dante Alighieri"}},{"id":"g10040","author":{"name":"Charles A. Lee"}},{"id":"g10041","author":{"name":"James Branch Cabell"}},{"id":"g10042","author":{"name":"E. R. Murray"}},{"id":"g10043","author":{"name":"Joseph Ladue"}},{"id":"g10044","author":{"name":"William Wood"}},{"id":"g10045","author":{"name":"H. Irving Hancock"}},{"id":"g10046","author":{"name":"John Buchan"}},{"id":"g10047","author":{"name":"Various"}},{"id":"g10048","author":{"name":"Janet D. Wheeler"}},{"id":"g10049","author":{"name":"Mrs. Oliphant"}},{"id":"g1005","author":{"name":"Dante Alighieri"}},{"id":"g10050","author":{"name":"Mrs. Oliphant"}},{"id":"g10051","author":{"name":"Mrs. Oliphant"}},{"id":"g10052","author":{"name":"Mrs. Oliphant"}},{"id":"g10053","author":{"name":"Paul Féval"}},{"id":"g10054","author":{"name":"Jöns Jakob Berzelius, friherre"}},{"id":"g10055","author":{"name":"Gotthold Ephraim Lessing"}},{"id":"g10056","author":{"name":"Confucius"}},{"id":"g10057","author":{"name":"Anthony Hope"}},{"id":"g10058","author":{"name":"Edward J. Quigley"}},{"id":"g10059","author":{"name":"L. Frank Baum"}},{"id":"g1006","author":{"name":"Dante Alighieri"}},{"id":"g10060","author":{"name":"Thomas Henry Huxley"}},{"id":"g10061","author":{"name":"Emile Verhaeren"}},{"id":"g10062","author":{"name":"Henry F. Keenan"}},{"id":"g10063","author":{"name":"Elizabeth Towne"}},{"id":"g10064","author":{"name":"Jeffery Farnol"}},{"id":"g10065","author":{"name":"James M. Beck"}},{"id":"g10066","author":{"name":"Max Brand"}},{
... (10202 bytes in full, cut for the report)

Rayfold 1 request

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id author { name } } }",
      "compact": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"items":[{"id":"b1","author":{"name":"Ursula K. Le Guin"}},{"id":"b2","author":{"name":"Italo Calvino"}},{"id":"b3","author":{"name":"Octavia E. Butler"}},{"id":"b4","author":{"name":"Ursula K. Le Guin"}},{"id":"g1","author":{"name":"Thomas Jefferson"}},{"id":"g10","author":{"name":"Unknown author"}},{"id":"g100","author":{"name":"William Shakespeare"}},{"id":"g1000","author":{"name":"Dante Alighieri"}},{"id":"g10000","author":{"name":"Anonymous"}},{"id":"g10001","author":{"name":"Lucius Annaeus Seneca"}},{"id":"g10002","author":{"name":"William Hope Hodgson"}},{"id":"g10003","author":{"name":"Mary King Waddington"}},{"id":"g10004","author":{"name":"Anna Robertson Brown Lindsay"}},{"id":"g10005","author":{"name":"George Tucker"}},{"id":"g10006","author":{"name":"Giovanni Boccaccio"}},{"id":"g10007","author":{"name":"Joseph Sheridan Le Fanu"}},{"id":"g10008","author":{"name":"Stewart Edward White"}},{"id":"g10009","author":{"name":"S. H. Hammond"}},{"id":"g1001","author":{"name":"Dante Alighieri"}},{"id":"g10010","author":{"name":"William Hayley"}},{"id":"g10011","author":{"name":"Unknown"}},{"id":"g10012","author":{"name":"John Muir"}},{"id":"g10013","author":{"name":"Various"}},{"id":"g10014","author":{"name":"Various"}},{"id":"g10015","author":{"name":"Various"}},{"id":"g10016","author":{"name":"Various"}},{"id":"g10017","author":{"name":"Various"}},{"id":"g10018","author":{"name":"Various"}},{"id":"g10019","author":{"name":"Various"}},{"id":"g1002","author":{"name":"Dante Alighieri"}},{"id":"g10020","author":{"name":"Various"}},{"id":"g10021","author":{"name":"Ada Leverson"}},{"id":"g10022","author":{"name":"A. J. Bueltmann"}},{"id":"g10023","author":{"name":"Charles S. Brooks"}},{"id":"g10024","author":{"name":"F. J. Cross"}},{"id":"g10025","author":{"name":"Fannie Hurst"}},{"id":"g10026","author":{"name":"Various"}},{"id":"g10027","author":{"name":"Harold Avery"}},{"id":"g10028","author":{"name":"John B. Foster"}},{"id":"g10029","author":{"name":"William Magnay, Sir"}},{"id":"g1003","author":{"name":"Dante Alighieri"}},{"id":"g10030","author":{"name":"Buffalo Bill"}},{"id":"g10031","author":{"name":"Edgar Allan Poe"}},{"id":"g10032","author":{"name":"Various"}},{"id":"g10033","author":{"name":"Various"}},{"id":"g10034","author":{"name":"Various"}},{"id":"g10035","author":{"name":"Various"}},{"id":"g10036","author":{"name":"Various"}},{"id":"g10037","author":{"name":"Edith Ferguson Black"}},{"id":"g10038","author":{"name":"Elizabeth Robins"}},{"id":"g10039","author":{"name":"Aphra Behn"}},{"id":"g1004","author":{"name":"Dante Alighieri"}},{"id":"g10040","author":{"name":"Charles A. Lee"}},{"id":"g10041","author":{"name":"James Branch Cabell"}},{"id":"g10042","author":{"name":"E. R. Murray"}},{"id":"g10043","author":{"name":"Joseph Ladue"}},{"id":"g10044","author":{"name":"William Wood"}},{"id":"g10045","author":{"name":"H. Irving Hancock"}},{"id":"g10046","author":{"name":"John Buchan"}},{"id":"g10047","author":{"name":"Various"}},{"id":"g10048","author":{"name":"Janet D. Wheeler"}},{"id":"g10049","author":{"name":"Mrs. Oliphant"}},{"id":"g1005","author":{"name":"Dante Alighieri"}},{"id":"g10050","author":{"name":"Mrs. Oliphant"}},{"id":"g10051","author":{"name":"Mrs. Oliphant"}},{"id":"g10052","author":{"name":"Mrs. Oliphant"}},{"id":"g10053","author":{"name":"Paul Féval"}},{"id":"g10054","author":{"name":"Jöns Jakob Berzelius, friherre"}},{"id":"g10055","author":{"name":"Gotthold Ephraim Lessing"}},{"id":"g10056","author":{"name":"Confucius"}},{"id":"g10057","author":{"name":"Anthony Hope"}},{"id":"g10058","author":{"name":"Edward J. Quigley"}},{"id":"g10059","author":{"name":"L. Frank Baum"}},{"id":"g1006","author":{"name":"Dante Alighieri"}},{"id":"g10060","author":{"name":"Thomas Henry Huxley"}},{"id":"g10061","author":{"name":"Emile Verhaeren"}},{"id":"g10062","author":{"name":"Henry F. Keenan"}},{"id":"g10063","author":{"name":"Elizabeth Towne"}},{"id":"g10064","author":{"name":"Jeffery Farnol"}},{"id":"g10065","author":{"name":"James M. Beck"}},{"id":"g10066","author":{"name":"Max Brand"}},{"i
... (10211 bytes in full, cut for the report)

Product page: Pride and Prejudice, Jane Austen and five more of her books

Rayfold ahead

Measured: requests and bytes for the page (bytes on the wire (request + response), lower is better)

RESTREST: 1,064 bytes on the wire (request + response)1,064GraphQLGraphQL: 541 bytes on the wire (request + response)541RayfoldRayfold: 399 bytes on the wire (request + response)399
REST
3 requests in 2 waves (book, then author and her books), 1064 B
GraphQL
1 request, 541 B (DataLoader: 1 author load, 1 books load)
Rayfold
1 request, 399 B (the lazy bio in a later frame of the same response)

g1342 by Jane Austen (Lived 1775-1817.), 22 of her books in the catalogue; the five shown are her first by id after this one is left out. Rayfold is measured as its client sends when it has the schema: compact frames in its binary encoding (RB). The identical ops as JSON took 629 B, with the identical data

See the real requests and responses (6)

REST 3 requests

GET /books/g1342
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "836f94a5675d40c6"

{
  "id": "g1342",
  "title": "Pride and Prejudice",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga59",
  "ownerId": "gutenberg"
}
GET /authors/ga59
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "b177eda9afe3f6c7"

{
  "id": "ga59",
  "name": "Jane Austen",
  "bio": "Lived 1775-1817."
}
1 more request
GET /authors/ga59/books?limit=6
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "eb756cb91d5df408"

{
  "items": [
    {
      "id": "g105",
      "title": "Persuasion",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga59",
      "ownerId": "gutenberg"
    },
    {
      "id": "g121",
      "title": "Northanger Abbey",
      "format": "EBOOK",
      "price": "0.00",
... 45 more lines
Full response body
{
  "items": [
    {
      "id": "g105",
      "title": "Persuasion",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga59",
      "ownerId": "gutenberg"
    },
    {
      "id": "g121",
      "title": "Northanger Abbey",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga59",
      "ownerId": "gutenberg"
    },
    {
      "id": "g1212",
      "title": "Love and Freindship [sic]",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga59",
      "ownerId": "gutenberg"
    },
    {
      "id": "g1342",
      "title": "Pride and Prejudice",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga59",
      "ownerId": "gutenberg"
    },
    {
      "id": "g141",
      "title": "Mansfield Park",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga59",
      "ownerId": "gutenberg"
    },
    {
      "id": "g158",
      "title": "Emma",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga59",
      "ownerId": "gutenberg"
    }
  ],
  "total": 22,
  "hasMore": true,
  "cursor": "g158"
}

GraphQL 1 request

POST /graphql
content-type: application/json

{
  "query": "{ book(id: \"g1342\") { id title author { id name bio books(first: 6) { items { id title } total } } } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "book": {
      "id": "g1342",
      "title": "Pride and Prejudice",
      "author": {
        "id": "ga59",
        "name": "Jane Austen",
        "bio": "Lived 1775-1817.",
        "books": {
          "items": [
            {
              "id": "g105",
              "title": "Persuasion"
            },
            {
... 26 more lines
Full response body
{
  "data": {
    "book": {
      "id": "g1342",
      "title": "Pride and Prejudice",
      "author": {
        "id": "ga59",
        "name": "Jane Austen",
        "bio": "Lived 1775-1817.",
        "books": {
          "items": [
            {
              "id": "g105",
              "title": "Persuasion"
            },
            {
              "id": "g121",
              "title": "Northanger Abbey"
            },
            {
              "id": "g1212",
              "title": "Love and Freindship [sic]"
            },
            {
              "id": "g1342",
              "title": "Pride and Prejudice"
            },
            {
              "id": "g141",
              "title": "Mansfield Park"
            },
            {
              "id": "g158",
              "title": "Emma"
            }
          ],
          "total": 22
        }
      }
    }
  }
}

Rayfold 2 requests

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "g1342"
      },
      "shape": "{ id title author { id name bio books(page: { first: 6 }) { items { id title } total } } }",
      "compact": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"id":"g1342","title":"Pride and Prejudice","author":{"id":"ga59","name":"Jane Austen","books":{"items":[{"id":"g105","title":"Persuasion"},{"id":"g121","title":"Northanger Abbey"},{"id":"g1212","title":"Love and Freindship [sic]"},{"id":"g1342","title":"Pride and Prejudice"},{"id":"g141","title":"Mansfield Park"},{"id":"g158","title":"Emma"}],"total":22}}}}
{"id":1,"at":"author","data":{"bio":"Lived 1775-1817."}}
{"id":1,"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 129 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"book","args":{"id":"g1342"},"shape":"{ id title author { id name bio books(page: { first: 6 }) { items { id title } total } } }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 262 bytes on the wire, shown decoded:
{"id":1,"data":{"id":"g1342","title":"Pride and Prejudice","author":{"id":"ga59","name":"Jane Austen","books":{"items":[{"id":"g105","title":"Persuasion"},{"id":"g121","title":"Northanger Abbey"},{"id":"g1212","title":"Love and Freindship [sic]"},{"id":"g1342","title":"Pride and Prejudice"},{"id":"g141","title":"Mansfield Park"},{"id":"g158","title":"Emma"}],"total":22}}}}
{"id":1,"at":"author","data":{"bio":"Lived 1775-1817."}}
{"id":1,"fin":true}

Deep pagination: the first 5,000 of 78,090 books by id, 500 asked per page

Rayfold ahead

Measured: round trips (round trips, lower is better)

RESTREST: 10 round trips10GraphQLGraphQL: 10 round trips10RayfoldRayfold: 7 round trips7
REST
10 pages of 500, one request each, 838428 B (whole book resources)
GraphQL
10 pages of 500, one request each, 392488 B
Rayfold
7 requests carrying 25 pages of 200: four pages a request, each page continuing after the previous page's cursor ($ref), 332541 B

Rayfold serves at most 200 rows a page and bounds each request by its cost budget; four 200-row pages (4 x 206 = 824 of the default 1,000) fit in one request because a later op can read an earlier op's cursor. REST and GraphQL here have no page cap and serve the 500 asked for, but a request cannot use a cursor it has not received yet, so each page is a round trip. All three return the catalogue's first 5,000 ids in order, with no duplicate and no gap. Rayfold is measured as its client sends when it has the schema: compact frames in its binary encoding (RB). The identical ops as JSON took 396086 B, with the identical data

See the real requests and responses (44)

REST 14 requests

GET /books?limit=500&after=
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "5e7de4ec78d0df91"

{"items":[{"id":"b1","title":"The Dispossessed","format":"PAPERBACK","price":"12.99","stock":5,"authorId":"a1","ownerId":"u1"},{"id":"b2","title":"Invisible Cities","format":"HARDCOVER","price":"19.50","stock":2,"authorId":"a2","ownerId":"u2"},{"id":"b3","title":"Kindred","format":"EBOOK","price":"8.00","stock":100,"authorId":"a3","ownerId":"u1"},{"id":"b4","title":"A Wizard of Earthsea","format":"PAPERBACK","price":"9.99","stock":0,"authorId":"a1","ownerId":"u1"},{"id":"g1","title":"The Declaration of Independence of the United States of America","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1","ownerId":"gutenberg"},{"id":"g10","title":"The King James Version of the Bible","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga0","ownerId":"gutenberg"},{"id":"g100","title":"The Complete Works of William Shakespeare","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1000","title":"La Divina Commedia di Dante: Complete","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga436","ownerId":"gutenberg"},{"id":"g10000","title":"The Magna Carta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga67","ownerId":"gutenberg"},{"id":"g10001","title":"Apocolocyntosis","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1105","ownerId":"gutenberg"},{"id":"g10002","title":"The House on the Borderland","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2627","ownerId":"gutenberg"},{"id":"g10003","title":"My First Years as a Frenchwoman, 1876-1879","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2628","ownerId":"gutenberg"},{"id":"g10004","title":"The Warriors","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2629","ownerId":"gutenberg"},{"id":"g10005","title":"A Voyage to the Moon: With Some Account of the Manners and Customs, Science and Philosophy, of the People of Morosofia, and Other Lunarians","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2630","ownerId":"gutenberg"},{"id":"g10006","title":"La Fiammetta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1083","ownerId":"gutenberg"},{"id":"g10007","title":"Carmilla","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga242","ownerId":"gutenberg"},{"id":"g10008","title":"The Mystery","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga218","ownerId":"gutenberg"},{"id":"g10009","title":"Wild Northern Scenes; Or, Sporting Adventures with the Rifle and the Rod","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2631","ownerId":"gutenberg"},{"id":"g1001","title":"Divine Comedy, Longfellow's Translation, Hell","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga436","ownerId":"gutenberg"},{"id":"g10010","title":"The Eulogies of Howard: A Vision","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2426","ownerId":"gutenberg"},{"id":"g10011","title":"365 Foreign Dishes: A Foreign Dish for Every Day in the Year","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga35","ownerId":"gutenberg"},{"id":"g10012","title":"The Mountains of California","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga162","ownerId":"gutenberg"},{"id":"g10013","title":"Punchinello, Volume 1, No. 09, May 28, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10014","title":"Punchinello, Volume 1, No. 18, July 30, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10015","title":"Punchinello, Volume 1, No. 19, August 6, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10016","title":"Punchinello, Volume 1, No. 21, August 20, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10017","title":"Punchinello, Volume 1, No. 23, September 3, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10018","title":"Punchinello, Volume 1, No.
... (80877 bytes in full, cut for the report)
GET /books?limit=500&after=g10589
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8b38436acf243247"

{"items":[{"id":"g1059","title":"The World Set Free","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga24","ownerId":"gutenberg"},{"id":"g10590","title":"Lady Mary Wortley Montague, Her Life and Letters (1689-1762)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2789","ownerId":"gutenberg"},{"id":"g10591","title":"A Lie Never Justifiable: A Study in Ethics","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2790","ownerId":"gutenberg"},{"id":"g10592","title":"Adventures in Friendship","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga800","ownerId":"gutenberg"},{"id":"g10593","title":"Great Possessions","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga800","ownerId":"gutenberg"},{"id":"g10594","title":"Punch, or the London Charivari, Volume 153, September 12, 1917","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10595","title":"Punch, or the London Charivari, Volume 153, September 19, 1917","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10596","title":"Cap and Gown: A Treasury of College Verse","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2791","ownerId":"gutenberg"},{"id":"g10597","title":"Four Early Pamphlets","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga336","ownerId":"gutenberg"},{"id":"g10598","title":"The Lives of the Poets of Great Britain and Ireland (1753) Volume I.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2792","ownerId":"gutenberg"},{"id":"g10599","title":"Lost in the Air","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2793","ownerId":"gutenberg"},{"id":"g106","title":"Jungle Tales of Tarzan","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga39","ownerId":"gutenberg"},{"id":"g1060","title":"Grass of Parnassus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga68","ownerId":"gutenberg"},{"id":"g10600","title":"A General History and Collection of Voyages and Travels — Volume 01: Arranged in Systematic Order: Forming a Complete History of the Origin and Progress of Navigation, Discovery, and Commerce, by Sea and Land, from the Earliest Ages to the Present Time","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2794","ownerId":"gutenberg"},{"id":"g10601","title":"The Rangeland Avenger","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga639","ownerId":"gutenberg"},{"id":"g10602","title":"The Poetical Works of Edmund Spenser, Volume 5","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1908","ownerId":"gutenberg"},{"id":"g10603","title":"With Kelly to Chitral","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2795","ownerId":"gutenberg"},{"id":"g10604","title":"Les affinités électives: Suivies d'un choix de pensées du même","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga506","ownerId":"gutenberg"},{"id":"g10605","title":"Adventures in Contentment","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga800","ownerId":"gutenberg"},{"id":"g10606","title":"Hamlet: A Study with the Text of the Folio of 1623","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g10607","title":"The Real Mother Goose","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2796","ownerId":"gutenberg"},{"id":"g10608","title":"The Turquoise Cup, and, the Desert","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2797","ownerId":"gutenberg"},{"id":"g10609","title":"English Literature: Its History and Its Significance for the Life of the English-Speaking World","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga640","ownerId":"gutenberg"},{"id":"g1061","title":"Myths and Myth-Makers: Old Tales and Superstitions Interpreted by Comparative Mythology","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga448","ownerId":"gutenberg"},{"id":"g10610","title":"Letters and Journals of James, Eighth Earl of Elgin","format":"EBOOK","price":"0.00","stock":1
... (83510 bytes in full, cut for the report)
12 more requests
GET /books?limit=500&after=g11052
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "3a2d805a322cda51"

{"items":[{"id":"g11053","title":"Minnie's Sacrifice","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga304","ownerId":"gutenberg"},{"id":"g11054","title":"Poems (1786), Volume I.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2975","ownerId":"gutenberg"},{"id":"g11055","title":"Lord Dolphin","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2976","ownerId":"gutenberg"},{"id":"g11056","title":"Trial and Triumph","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga304","ownerId":"gutenberg"},{"id":"g11057","title":"The Wife of his Youth and Other Stories of the Color Line, and Selected Essays","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga223","ownerId":"gutenberg"},{"id":"g11058","title":"Jack Archer: A Tale of the Crimea","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga879","ownerId":"gutenberg"},{"id":"g11059","title":"The Sylphs of the Season with Other Poems","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2977","ownerId":"gutenberg"},{"id":"g1106","title":"Titus Andronicus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g11060","title":"The Aspirations of Jean Servien","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga651","ownerId":"gutenberg"},{"id":"g11061","title":"The Atlantic Monthly, Volume 06, No. 34, August, 1860: A Magazine Of Literature, Art, And Politics","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g11062","title":"The Dozen from Lakerim","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1971","ownerId":"gutenberg"},{"id":"g11063","title":"A man of mark","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga54","ownerId":"gutenberg"},{"id":"g11064","title":"Andromeda, and Other Poems","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga303","ownerId":"gutenberg"},{"id":"g11065","title":"Aunt Mary's Primer: Adorned with a Hundred and Twenty Pretty Pictures","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga67","ownerId":"gutenberg"},{"id":"g11066","title":"Graf von Loeben and the Legend of Lorelei: From \"Modern Philology\" vol. 13 (1915)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2978","ownerId":"gutenberg"},{"id":"g11067","title":"Reform Cookery Book (4th edition): Up-To-Date Health Cookery for the Twentieth Century.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2979","ownerId":"gutenberg"},{"id":"g11068","title":"The Spirit of the Age; Or, Contemporary Portraits","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga689","ownerId":"gutenberg"},{"id":"g11069","title":"Squinty the Comical Pig: His Many Adventures","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2980","ownerId":"gutenberg"},{"id":"g1107","title":"The Taming of the Shrew","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g11070","title":"La Fontana de Oro","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga793","ownerId":"gutenberg"},{"id":"g11071","title":"Naufragios de Alvar Núñez Cabeza de Vaca","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2981","ownerId":"gutenberg"},{"id":"g11072","title":"Jumalainen näytelmä: Kiirastuli","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga436","ownerId":"gutenberg"},{"id":"g11073","title":"The Illustrated Alphabet of Birds","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga35","ownerId":"gutenberg"},{"id":"g11074","title":"The Damned","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1159","ownerId":"gutenberg"},{"id":"g11075","title":"Der Mann im Nebel","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2982","ownerId":"gutenberg"},{"id":"g11076","title":"Punch, or the London Charivari, Volume 153, October 24, 1917","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g11077","title":"Ebooks: Neither E, Nor Books: Paper for the O'Reilly
... (84205 bytes in full, cut for the report)
GET /books?limit=500&after=g11504
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "81813c3f0c74d4ee"

{"items":[{"id":"g11505","title":"All Things Considered","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga69","ownerId":"gutenberg"},{"id":"g11506","title":"The Old Bell of Independence; Or, Philadelphia in 1776","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3127","ownerId":"gutenberg"},{"id":"g11507","title":"The Lure of San Francisco: A Romance Amid Old Landmarks","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3128","ownerId":"gutenberg"},{"id":"g11508","title":"Reminiscences of a Pioneer","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3129","ownerId":"gutenberg"},{"id":"g11509","title":"The Life of Jesus Christ for the Young, Vol. 3","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3130","ownerId":"gutenberg"},{"id":"g1151","title":"The Nibelungenlied","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga462","ownerId":"gutenberg"},{"id":"g11510","title":"Fascinating San Francisco","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3131","ownerId":"gutenberg"},{"id":"g11511","title":"Robinsono Kruso","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga183","ownerId":"gutenberg"},{"id":"g11512","title":"O. Henry Memorial Award Prize Stories of 1921","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3132","ownerId":"gutenberg"},{"id":"g11513","title":"On Land and Sea at the Dardanelles","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3133","ownerId":"gutenberg"},{"id":"g11514","title":"Balcony Stories","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3134","ownerId":"gutenberg"},{"id":"g11515","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 532, February 4, 1832","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g11516","title":"The Mirror of Literature, Amusement, and Instruction. Volume 14, No. 380, July 11, 1829","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g11517","title":"Out of Doors—California and Oregon","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3135","ownerId":"gutenberg"},{"id":"g11518","title":"The Mirror of Literature, Amusement, and Instruction. Volume 14, No. 387, August 28, 1829","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g11519","title":"The Mirror of Literature, Amusement, and Instruction. Volume 14, No. 383, August 1, 1829","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g1152","title":"The Story of the Volsungs (Volsunga Saga); with Excerpts from the Poetic Edda","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga463","ownerId":"gutenberg"},{"id":"g11520","title":"The Obstacle Race","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2770","ownerId":"gutenberg"},{"id":"g11521","title":"A Beleaguered City: Being a Narrative of Certain Recent Events in the City of Semur, in the Department of the Haute Bourgogne. A Story of the Seen and the Unseen","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga826","ownerId":"gutenberg"},{"id":"g11522","title":"Deadly Pollen","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3136","ownerId":"gutenberg"},{"id":"g11523","title":"Behind the News: Voices from Goa's Press","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g11524","title":"The Atlantic Monthly, Volume 08, No. 50, December, 1861: A Magazine of Literature, Art, and Politics","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g11525","title":"The Atlantic Monthly, Volume 03, No. 18, April, 1859: A Magazine of Literature, Art, and Politics","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g11526","title":"Summer on the Lakes, in 1843","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2361","ownerId":"gutenberg"},{"id":"g11527","ti
... (83304 bytes in full, cut for the report)
GET /books?limit=500&after=g1198
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "e229af2deb3bc6ba"

{"items":[{"id":"g11980","title":"A Tramp's Sketches","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3245","ownerId":"gutenberg"},{"id":"g11981","title":"The World's Great Sermons, Volume 01: Basil to Calvin","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2812","ownerId":"gutenberg"},{"id":"g11982","title":"Eighty Years and More; Reminiscences 1815-1897","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2578","ownerId":"gutenberg"},{"id":"g11983","title":"Poetic Sketches: A Collection of Miscellaneous Poetry","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3036","ownerId":"gutenberg"},{"id":"g11984","title":"A Pluralistic Universe: Hibbert Lectures at Manchester College on the Present Situation in Philosophy","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga288","ownerId":"gutenberg"},{"id":"g11985","title":"Russian Lyrics","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3246","ownerId":"gutenberg"},{"id":"g11986","title":"The Book of American Negro Poetry","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2956","ownerId":"gutenberg"},{"id":"g11987","title":"By Advice of Counsel","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1474","ownerId":"gutenberg"},{"id":"g11988","title":"The Human Chord","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1159","ownerId":"gutenberg"},{"id":"g11989","title":"The Crime of the French Café and Other Stories","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3247","ownerId":"gutenberg"},{"id":"g1199","title":"An Anthology of Australian Verse","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga473","ownerId":"gutenberg"},{"id":"g11990","title":"Shakespeare's Insomnia, and the Causes Thereof","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3248","ownerId":"gutenberg"},{"id":"g11991","title":"Po-No-Kah: An Indian Tale of Long Ago","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga351","ownerId":"gutenberg"},{"id":"g11992","title":"A Residence in France During the Years 1792, 1793, 1794 and 1795, Part I. 1792: Described in a Series of Letters from an English Lady: with General and Incidental Remarks on the French Character and Manners","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3249","ownerId":"gutenberg"},{"id":"g11993","title":"A Residence in France During the Years 1792, 1793, 1794 and 1795, Part II., 1793: Described in a Series of Letters from an English Lady: with General and Incidental Remarks on the French Character and Manners","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3249","ownerId":"gutenberg"},{"id":"g11994","title":"A Residence in France During the Years 1792, 1793, 1794 and 1795, Part III., 1794: Described in a Series of Letters from an English Lady: with General and Incidental Remarks on the French Character and Manners","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3249","ownerId":"gutenberg"},{"id":"g11995","title":"A Residence in France During the Years 1792, 1793, 1794 and 1795, Part IV., 1795: Described in a Series of Letters from an English Lady: with General and Incidental Remarks on the French Character and Manners","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3249","ownerId":"gutenberg"},{"id":"g11996","title":"A Residence in France During the Years 1792, 1793, 1794 and 1795, Complete: Described in a Series of Letters from an English Lady: with General and Incidental Remarks on the French Character and Manners","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3249","ownerId":"gutenberg"},{"id":"g11997","title":"Crusoes of the Frozen North","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3250","ownerId":"gutenberg"},{"id":"g11998","title":"Sight to the Blind","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3251","ownerId":"gutenberg"},{"id":"g11999","title":"The Servant in the House","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3252","ownerId":"gutenberg"},{"id":"g12","titl
... (86007 bytes in full, cut for the report)
GET /books?limit=500&after=g12430
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "b29111eae291b524"

{"items":[{"id":"g12431","title":"The Coquette, or, The History of Eliza Wharton: A Novel: Founded on Fact","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3422","ownerId":"gutenberg"},{"id":"g12432","title":"Kalevalan avain","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3316","ownerId":"gutenberg"},{"id":"g12433","title":"Narrative of the Voyage of H.M.S. Rattlesnake, Commanded By the Late Captain Owen Stanley, R.N., F.R.S. Etc. During the Years 1846-1850. — Volume 1: Including Discoveries and Surveys in New Guinea, the Louisiade Archipelago, Etc. to Which Is Added the Account of Mr. E.B. Kennedy's Expedition for the Exploration of the Cape York Peninsula. By John Macgillivray, F.R.G.S. Naturalist to the Expedition.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3423","ownerId":"gutenberg"},{"id":"g12434","title":"Twelve Studies on the Making of a Nation: The Beginnings of Israel's History","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2348","ownerId":"gutenberg"},{"id":"g12435","title":"Paginas Sudamericanas","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3424","ownerId":"gutenberg"},{"id":"g12436","title":"The Night Horseman","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga639","ownerId":"gutenberg"},{"id":"g12437","title":"Histoire de St. Louis, Roi de France","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3425","ownerId":"gutenberg"},{"id":"g12438","title":"The Mirror of Literature, Amusement, and Instruction. Volume 12, No. 335, October 11, 1828","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g12439","title":"Notes on Nursing: What It Is, and What It Is Not","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3426","ownerId":"gutenberg"},{"id":"g1244","title":"Love for Love: A Comedy","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga470","ownerId":"gutenberg"},{"id":"g12440","title":"D'Ri and I: A Tale of Daring Deeds in the Second War with the British.: Being the Memoirs of Colonel Ramon Bell, U.S.A.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga874","ownerId":"gutenberg"},{"id":"g12441","title":"The House of a Thousand Candles","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3427","ownerId":"gutenberg"},{"id":"g12442","title":"In the Days of My Youth: A Novel","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2282","ownerId":"gutenberg"},{"id":"g12443","title":"The jute industry","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3428","ownerId":"gutenberg"},{"id":"g12444","title":"Toaster's Handbook: Jokes, Stories, and Quotations","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3429","ownerId":"gutenberg"},{"id":"g12445","title":"The Water-Witch; Or, the Skimmer of the Seas: A Tale","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga417","ownerId":"gutenberg"},{"id":"g12446","title":"Il Designato: Romanzo","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3190","ownerId":"gutenberg"},{"id":"g12447","title":"Pauline","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga736","ownerId":"gutenberg"},{"id":"g12448","title":"L'Orco","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga736","ownerId":"gutenberg"},{"id":"g12449","title":"A Reputed Changeling; Or, Three Seventh Years Two Centuries Ago","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga814","ownerId":"gutenberg"},{"id":"g1245","title":"Night and Day","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga77","ownerId":"gutenberg"},{"id":"g12450","title":"The Reason Why","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1479","ownerId":"gutenberg"},{"id":"g12451","title":"De profundis! Episode Maritime","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3430","ownerId":"gutenberg"},{"id":"g12452","title":"Fort Lafayette or, Love and Secession: A Novel","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3431","ownerId":"g
... (85911 bytes in full, cut for the report)
GET /books?limit=500&after=g12904
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "9843cddcf348485c"

{"items":[{"id":"g12905","title":"Punch, or the London Charivari, Volume 99, December 13, 1890","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g12906","title":"Canzio; Selman juonet","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3016","ownerId":"gutenberg"},{"id":"g12907","title":"Runot; Lyhyet kertomukset","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3016","ownerId":"gutenberg"},{"id":"g12908","title":"Missing","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2217","ownerId":"gutenberg"},{"id":"g12909","title":"Romance of the Rabbit","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3562","ownerId":"gutenberg"},{"id":"g1291","title":"Herodias","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga494","ownerId":"gutenberg"},{"id":"g12910","title":"Early Britain—Roman Britain","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3563","ownerId":"gutenberg"},{"id":"g12911","title":"A Backward Glance at Eighty: Recollections & Comment","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3564","ownerId":"gutenberg"},{"id":"g12912","title":"The Price of Love","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga742","ownerId":"gutenberg"},{"id":"g12913","title":"Moral Science; a Compendium of Ethics","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3565","ownerId":"gutenberg"},{"id":"g12914","title":"One Hundred Best Books: With Commentary and an Essay on Books and Reading","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3566","ownerId":"gutenberg"},{"id":"g12915","title":"The White Devil","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga739","ownerId":"gutenberg"},{"id":"g12916","title":"The Secret History of the Court of Justinian","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3567","ownerId":"gutenberg"},{"id":"g12917","title":"Punch, or the London Charivari, Volume 99, December 20, 1890","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g12918","title":"Iranian Influence on Moslem Literature, Part I","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3568","ownerId":"gutenberg"},{"id":"g12919","title":"A Texas Matchmaker","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga665","ownerId":"gutenberg"},{"id":"g1292","title":"The Way of the World","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga470","ownerId":"gutenberg"},{"id":"g12920","title":"The \"Goldfish\": Being the Confessions af a Successful Man","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1474","ownerId":"gutenberg"},{"id":"g12921","title":"Gesammelte Werke in fünf Bänden — 1. Band","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1416","ownerId":"gutenberg"},{"id":"g12922","title":"Burke","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2930","ownerId":"gutenberg"},{"id":"g12923","title":"The Laird's Luck and Other Fireside Tales","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga511","ownerId":"gutenberg"},{"id":"g12924","title":"The World's Best Poetry, Volume 08: National Spirit","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3402","ownerId":"gutenberg"},{"id":"g12925","title":"The World's Best Poetry, Volume 10: Poetical Quotations","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3402","ownerId":"gutenberg"},{"id":"g12926","title":"The Morris Book, Part 1: A History of Morris Dancing, With a Description of Eleven Dances as Performed by the Morris-Men of England","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3569","ownerId":"gutenberg"},{"id":"g12927","title":"Charaktere und Schicksale","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3303","ownerId":"gutenberg"},{"id":"g12928","title":"Three Expeditions into the Interior of Eastern Australia, Volume 1: With Descriptions of the Recently Explored Region of Australia Felix, and of the Present Colony of New South Wales","for
... (86781 bytes in full, cut for the report)
GET /books?limit=500&after=g13358
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "2c10f374059e2a62"

{"items":[{"id":"g13359","title":"The Mirror of Literature, Amusement, and Instruction. Volume 14, No. 391, September 26, 1829","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g1336","title":"Shelley: An Essay","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga528","ownerId":"gutenberg"},{"id":"g13360","title":"Missionary Survey As An Aid To Intelligent Co-Operation In Foreign Missions","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3747","ownerId":"gutenberg"},{"id":"g13361","title":"Notes and Queries, Number 36, July 6, 1850","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g13362","title":"Notes and Queries, Number 38, July 20, 1850","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g13363","title":"The Parish Clerk","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2319","ownerId":"gutenberg"},{"id":"g13364","title":"Matthew Arnold's Sohrab and Rustum, and other poems","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1183","ownerId":"gutenberg"},{"id":"g13365","title":"The Ethics of Drink and Other Social Questions; Or, Joints In Our Social Armour","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3748","ownerId":"gutenberg"},{"id":"g13366","title":"A General History and Collection of Voyages and Travels — Volume 08","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2794","ownerId":"gutenberg"},{"id":"g13367","title":"Hills and the Sea","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2067","ownerId":"gutenberg"},{"id":"g13368","title":"Korea's Fight for Freedom","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3749","ownerId":"gutenberg"},{"id":"g13369","title":"The Lost Ambassador; Or, The Search For The Missing Delora","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga514","ownerId":"gutenberg"},{"id":"g1337","title":"Shelley","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga529","ownerId":"gutenberg"},{"id":"g13370","title":"Q. E. D., or New Light on the Doctrine of Creation","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3750","ownerId":"gutenberg"},{"id":"g13371","title":"Folkungaträdet","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3751","ownerId":"gutenberg"},{"id":"g13372","title":"The Gloved Hand","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga840","ownerId":"gutenberg"},{"id":"g13373","title":"Punch, or the London Charivari, Volume 100, June 13, 1891","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g13374","title":"Consuelo, Tome 3 (1861)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga736","ownerId":"gutenberg"},{"id":"g13375","title":"The Rival Heirs; being the Third and Last Chronicle of Aescendune","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3691","ownerId":"gutenberg"},{"id":"g13376","title":"Our Legal Heritage, King AEthelbert, 596 to King George III, 1775","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga605","ownerId":"gutenberg"},{"id":"g13377","title":"A tour through some parts of France, Switzerland, Savoy, Germany and Belgium, during the summer and autumn of 1814","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3752","ownerId":"gutenberg"},{"id":"g13378","title":"De baanwachter","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2729","ownerId":"gutenberg"},{"id":"g13379","title":"The Two Elsies: A Sequel to Elsie at Nantucket","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1715","ownerId":"gutenberg"},{"id":"g1338","title":"Selected Prose of Oscar Wilde","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga98","ownerId":"gutenberg"},{"id":"g13380","title":"Gabriel","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga736","ownerId":"gutenberg"},{"id":"g13381","title":"A General History and Collection of Voyages and Travels — Volume 
... (83289 bytes in full, cut for the report)
GET /books?limit=500&after=g1381
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "402c282bead14b38"

{"items":[{"id":"g13810","title":"Tristan","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3278","ownerId":"gutenberg"},{"id":"g13811","title":"Peter Stuyvesant, the Last Dutch Governor of New Amsterdam","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1097","ownerId":"gutenberg"},{"id":"g13812","title":"Sir Mortimer: A Novel","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga604","ownerId":"gutenberg"},{"id":"g13813","title":"The Common Law","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1366","ownerId":"gutenberg"},{"id":"g13814","title":"The Development of the Feeling for Nature in the Middle Ages and Modern Times","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3891","ownerId":"gutenberg"},{"id":"g13815","title":"The Talking Beasts: A Book of Fable Wisdom","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga236","ownerId":"gutenberg"},{"id":"g13816","title":"The Jericho Road","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3892","ownerId":"gutenberg"},{"id":"g13817","title":"With Marlborough to Malplaquet","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3893","ownerId":"gutenberg"},{"id":"g13818","title":"Jacques","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga736","ownerId":"gutenberg"},{"id":"g13819","title":"Les compagnons de Jéhu","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga424","ownerId":"gutenberg"},{"id":"g1382","title":"Poems — Volume 2","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga443","ownerId":"gutenberg"},{"id":"g13820","title":"Unhappy Far-Off Things","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga512","ownerId":"gutenberg"},{"id":"g13821","title":"Tales of Wonder","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga512","ownerId":"gutenberg"},{"id":"g13822","title":"Notes and Queries, Number 26, April 27, 1850","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g13823","title":"Lady Merton, Colonist","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2217","ownerId":"gutenberg"},{"id":"g13824","title":"The National Preacher, Vol. 2 No. 7 Dec. 1827: Or Original Monthly Sermons from Living Ministers, Sermons XXVI. and: XXVII.","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3894","ownerId":"gutenberg"},{"id":"g13825","title":"Sapho","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga627","ownerId":"gutenberg"},{"id":"g13826","title":"A Gunner Aboard the \"Yankee\": From the Diary of Number Five of the After Port Gun (Russell Doubleday): The Yarn of the Cruise and Fights of the Naval Reserves in the Spanish-American War","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3088","ownerId":"gutenberg"},{"id":"g13827","title":"Fields of Victory","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2217","ownerId":"gutenberg"},{"id":"g13828","title":"Lippincott's Magazine of Popular Literature and Science, Volume 12, No. 29, August, 1873","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g13829","title":"The Mirror of Literature, Amusement, and Instruction. Volume 17, No. 475, February 5, 1831","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g1383","title":"Poems — Volume 3","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga443","ownerId":"gutenberg"},{"id":"g13830","title":"The Wreck of the Hesperus","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga12","ownerId":"gutenberg"},{"id":"g13831","title":"Evolution Of The Japanese, Social And Psychic","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3895","ownerId":"gutenberg"},{"id":"g13832","title":"Romance of California Life: Illustrated by Pacific Slope Stories, Thrilling, Pathetic and Humorous","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1206","ownerId":"gutenberg"},{"id":"g13833","title":"Blackfeet Indian Stories","format":"EBOOK","pr
... (82311 bytes in full, cut for the report)
GET /books?limit=500&after=g1426
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "a5371058bc614ef1"

{"items":[{"id":"g14260","title":"The Great Events by Famous Historians, Volume 06: (From Barbarossa to Dante)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2593","ownerId":"gutenberg"},{"id":"g14261","title":"Alton of Somasco: A Romance of the Great Northwest","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1065","ownerId":"gutenberg"},{"id":"g14262","title":"The Shadow of a Crime: A Cumbrian Romance","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga510","ownerId":"gutenberg"},{"id":"g14263","title":"Katrine: A Novel","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga4056","ownerId":"gutenberg"},{"id":"g14264","title":"The Practice and Science of Drawing","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga4057","ownerId":"gutenberg"},{"id":"g14265","title":"The Philippine Islands, 1493-1898 — Volume 09 of 55: 1593-1597: Explorations by Early Navigators, Descriptions of the Islands and Their Peoples, Their History and Records of the Catholic Missions, as Related in Contemporaneous Books and Manuscripts, Showing the Political, Economic, Commercial and Religious Conditions of Those Islands from Their Earliest Relations with European Nations to the Close of the Nineteenth Century","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3490","ownerId":"gutenberg"},{"id":"g14266","title":"The Philippine Islands, 1493-1898 — Volume 10 of 55: 1597-1599: Explorations by Early Navigators, Descriptions of the Islands and Their Peoples, Their History and Records of the Catholic Missions, as Related in Contemporaneous Books and Manuscripts, Showing the Political, Economic, Commercial and Religious Conditions of Those Islands from Their Earliest Relations with European Nations to the Close of the Nineteenth Century","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3490","ownerId":"gutenberg"},{"id":"g14267","title":"Heräämiseni","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3321","ownerId":"gutenberg"},{"id":"g14268","title":"Historia Calamitatum","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga4058","ownerId":"gutenberg"},{"id":"g14269","title":"Aan de Zuidpool: De Aarde en haar Volken, 1913","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1010","ownerId":"gutenberg"},{"id":"g1427","title":"A Drama on the Seashore","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga222","ownerId":"gutenberg"},{"id":"g14270","title":"Panayam ng Tatlong Binata — Unang Hati","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga4059","ownerId":"gutenberg"},{"id":"g14271","title":"Panayam ng Tatlong Binata — Ikalawang Hati","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga4059","ownerId":"gutenberg"},{"id":"g14272","title":"Punch, Or The London Charivari, Volume 102, January 30, 1892","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g14273","title":"Invisible Links","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1441","ownerId":"gutenberg"},{"id":"g14274","title":"Lincoln's Inaugurals, Addresses and Letters (Selections)","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga4","ownerId":"gutenberg"},{"id":"g14275","title":"The Necromancers","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga3168","ownerId":"gutenberg"},{"id":"g14276","title":"Italian Journeys","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga84","ownerId":"gutenberg"},{"id":"g14277","title":"Punch, or the London Charivari, Volume 100, April 25, 1891","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g14278","title":"The Radio Boys on the Mexican Border","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga4060","ownerId":"gutenberg"},{"id":"g14279","title":"The Ancient Life History of the Earth: A Comprehensive Outline of the Principles and Leading Facts of Palæontological Science","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga4061","ownerId":"gutenberg"},{"id":"
... (81952 bytes in full, cut for the report)
GET /books?limit=1&after=g1000a
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "041a542628b02ff6"

{
  "items": [],
  "total": 78090,
  "hasMore": false,
  "cursor": null
}
GET /books?limit=1&after=g1471
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "7dace8fe401285b9"

{
  "items": [
    {
      "id": "g14710",
      "title": "Uncle Titus and His Visit to the Country",
      "format": "EBOOK",
      "price": "0.00",
      "stock": 1000000,
      "authorId": "ga555",
      "ownerId": "gutenberg"
    }
  ],
  "total": 78090,
  "hasMore": true,
  "cursor": "g14710"
}

original parameters only: the original { items, total } body

GET /books?limit=1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c9f96336c0e52ffe"

{
  "items": [
    {
      "id": "b1",
      "title": "The Dispossessed",
      "format": "PAPERBACK",
      "price": "12.99",
      "stock": 5,
      "authorId": "a1",
      "ownerId": "u1"
    }
  ],
  "total": 78090
}

after= opts into the cursor fields

GET /books?limit=1&after=
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "2da614a8a81387c9"

{
  "items": [
    {
      "id": "b1",
      "title": "The Dispossessed",
      "format": "PAPERBACK",
      "price": "12.99",
      "stock": 5,
      "authorId": "a1",
      "ownerId": "u1"
    }
  ],
  "total": 78090,
  "hasMore": true,
  "cursor": "b1"
}

GraphQL 12 requests

POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 500, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": null
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"b1","title":"The Dispossessed"},{"id":"b2","title":"Invisible Cities"},{"id":"b3","title":"Kindred"},{"id":"b4","title":"A Wizard of Earthsea"},{"id":"g1","title":"The Declaration of Independence of the United States of America"},{"id":"g10","title":"The King James Version of the Bible"},{"id":"g100","title":"The Complete Works of William Shakespeare"},{"id":"g1000","title":"La Divina Commedia di Dante: Complete"},{"id":"g10000","title":"The Magna Carta"},{"id":"g10001","title":"Apocolocyntosis"},{"id":"g10002","title":"The House on the Borderland"},{"id":"g10003","title":"My First Years as a Frenchwoman, 1876-1879"},{"id":"g10004","title":"The Warriors"},{"id":"g10005","title":"A Voyage to the Moon: With Some Account of the Manners and Customs, Science and Philosophy, of the People of Morosofia, and Other Lunarians"},{"id":"g10006","title":"La Fiammetta"},{"id":"g10007","title":"Carmilla"},{"id":"g10008","title":"The Mystery"},{"id":"g10009","title":"Wild Northern Scenes; Or, Sporting Adventures with the Rifle and the Rod"},{"id":"g1001","title":"Divine Comedy, Longfellow's Translation, Hell"},{"id":"g10010","title":"The Eulogies of Howard: A Vision"},{"id":"g10011","title":"365 Foreign Dishes: A Foreign Dish for Every Day in the Year"},{"id":"g10012","title":"The Mountains of California"},{"id":"g10013","title":"Punchinello, Volume 1, No. 09, May 28, 1870"},{"id":"g10014","title":"Punchinello, Volume 1, No. 18, July 30, 1870"},{"id":"g10015","title":"Punchinello, Volume 1, No. 19, August 6, 1870"},{"id":"g10016","title":"Punchinello, Volume 1, No. 21, August 20, 1870"},{"id":"g10017","title":"Punchinello, Volume 1, No. 23, September 3, 1870"},{"id":"g10018","title":"Punchinello, Volume 1, No. 05, April 30, 1870"},{"id":"g10019","title":"Punchinello, Volume 1, No. 22, August 27, 1870"},{"id":"g1002","title":"Divine Comedy, Longfellow's Translation, Purgatory"},{"id":"g10020","title":"The Strand Magazine: Vol. 07, Issue 37, January, 1894.: An Illustrated Monthly"},{"id":"g10021","title":"Tenterhooks"},{"id":"g10022","title":"White Queen of the Cannibals: the Story of Mary Slessor of Calabar"},{"id":"g10023","title":"There's Pippins and Cheese to Come"},{"id":"g10024","title":"Beneath the Banner: Being Narratives of Noble Lives and Brave Deeds"},{"id":"g10025","title":"Gaslight Sonatas"},{"id":"g10026","title":"The Mirror of Literature, Amusement, and Instruction. Volume 10, No. 268, August 11, 1827"},{"id":"g10027","title":"The Triple Alliance, Its Trials and Triumphs"},{"id":"g10028","title":"Spalding's Official Baseball Guide - 1913"},{"id":"g10029","title":"The Hunt Ball Mystery"},{"id":"g1003","title":"Divine Comedy, Longfellow's Translation, Paradise"},{"id":"g10030","title":"The Life of Hon. William F. Cody, Known as Buffalo Bill, the Famous Hunter, Scout and Guide: An Autobiography"},{"id":"g10031","title":"The Complete Poetical Works of Edgar Allan Poe: Including Essays on Poetry"},{"id":"g10032","title":"Punchinello, Volume 1, No. 24, September 10, 1870"},{"id":"g10033","title":"Punchinello, Volume 1, No. 25, September 17, 1870"},{"id":"g10034","title":"Punchinello, Volume 1, No. 26, September 24, 1870"},{"id":"g10035","title":"Punchinello, Volume 2, No. 27, October 1, 1870"},{"id":"g10036","title":"Punchinello, Volume 2, No. 28, October 8, 1870"},{"id":"g10037","title":"A Beautiful Possibility"},{"id":"g10038","title":"The Magnetic North"},{"id":"g10039","title":"The Works of Aphra Behn, Volume III"},{"id":"g1004","title":"Divine Comedy, Longfellow's Translation, Complete"},{"id":"g10040","title":"Aleutian Indian and English Dictionary: Common Words in the Dialects of the Aleutian Indian Language as Spoken by the Oogashik, Egashik, Anangashuk and Misremie Tribes Around Sulima River and Neighboring Parts of the Alaska Peninsula"},{"id":"g10041","title":"The Rivet in Grandfather's Neck: A Comedy of Limitations"},{"id":"g10042","title":"The child under eight"},{"id":"g10043","title":"Klondyke Nuggets: A Brief Description of the Great Gold Regions in the Northwest"},{"id":"g10044",
... (36231 bytes in full, cut for the report)
POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 500, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": "g10589"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"g1059","title":"The World Set Free"},{"id":"g10590","title":"Lady Mary Wortley Montague, Her Life and Letters (1689-1762)"},{"id":"g10591","title":"A Lie Never Justifiable: A Study in Ethics"},{"id":"g10592","title":"Adventures in Friendship"},{"id":"g10593","title":"Great Possessions"},{"id":"g10594","title":"Punch, or the London Charivari, Volume 153, September 12, 1917"},{"id":"g10595","title":"Punch, or the London Charivari, Volume 153, September 19, 1917"},{"id":"g10596","title":"Cap and Gown: A Treasury of College Verse"},{"id":"g10597","title":"Four Early Pamphlets"},{"id":"g10598","title":"The Lives of the Poets of Great Britain and Ireland (1753) Volume I."},{"id":"g10599","title":"Lost in the Air"},{"id":"g106","title":"Jungle Tales of Tarzan"},{"id":"g1060","title":"Grass of Parnassus"},{"id":"g10600","title":"A General History and Collection of Voyages and Travels — Volume 01: Arranged in Systematic Order: Forming a Complete History of the Origin and Progress of Navigation, Discovery, and Commerce, by Sea and Land, from the Earliest Ages to the Present Time"},{"id":"g10601","title":"The Rangeland Avenger"},{"id":"g10602","title":"The Poetical Works of Edmund Spenser, Volume 5"},{"id":"g10603","title":"With Kelly to Chitral"},{"id":"g10604","title":"Les affinités électives: Suivies d'un choix de pensées du même"},{"id":"g10605","title":"Adventures in Contentment"},{"id":"g10606","title":"Hamlet: A Study with the Text of the Folio of 1623"},{"id":"g10607","title":"The Real Mother Goose"},{"id":"g10608","title":"The Turquoise Cup, and, the Desert"},{"id":"g10609","title":"English Literature: Its History and Its Significance for the Life of the English-Speaking World"},{"id":"g1061","title":"Myths and Myth-Makers: Old Tales and Superstitions Interpreted by Comparative Mythology"},{"id":"g10610","title":"Letters and Journals of James, Eighth Earl of Elgin"},{"id":"g10611","title":"An Essay on the Slavery and Commerce of the Human Species, Particularly the African: Translated from a Latin Dissertation, Which Was Honoured with the First Prize in the University of Cambridge, for the Year 1785, with Additions"},{"id":"g10612","title":"Supply and Demand"},{"id":"g10613","title":"The Theory of Social Revolutions"},{"id":"g10614","title":"Punch, or the London Charivari, Volume 153, September 5, 1917"},{"id":"g10615","title":"An Essay Concerning Humane Understanding, Volume 1: MDCXC, Based on the 2nd Edition, Books 1 and 2"},{"id":"g10616","title":"An Essay Concerning Humane Understanding, Volume 2: MDCXC, Based on the 2nd Edition, Books 3 and 4"},{"id":"g10617","title":"Within the Deep: Cassell's \"Eyes and No Eyes\" Series, Book VIII."},{"id":"g10618","title":"\"Jesus Says So\": Or, a Memorial of Little Sarah G--"},{"id":"g10619","title":"An Englishman's travels in America"},{"id":"g1062","title":"First Project Gutenberg Collection of Edgar Allan Poe"},{"id":"g10620","title":"The Works of Francis Beaumont and John Fletcher in Ten Volumes: Volume 01."},{"id":"g10621","title":"Birthright: A Novel"},{"id":"g10622","title":"The Lives of the Poets of Great Britain and Ireland (1753) Volume III."},{"id":"g10623","title":"Plays"},{"id":"g10624","title":"Three John Silence Stories"},{"id":"g10625","title":"A Concise Dictionary of Middle English from A.D. 1150 to 1580"},{"id":"g10626","title":"The Atlantic Monthly, Volume 02, No. 10, August, 1858: A Magazine of Literature, Art, and Politics"},{"id":"g10627","title":"Beacon Lights of History, Volume 08: Great Rulers"},{"id":"g10628","title":"Andrew Golding: A Tale of the Great Plague"},{"id":"g10629","title":"Britain at Bay"},{"id":"g1063","title":"The Cask of Amontillado"},{"id":"g10630","title":"Coming to the King"},{"id":"g10631","title":"Halleck's New English Literature"},{"id":"g10632","title":"The Healthy Life Cook Book, 2d ed."},{"id":"g10633","title":"The History of the Rise, Progress and Accomplishment of the Abolition of the African Slave-Trade, by the British Parliament (1839)"},{"id":"g10634","title":"The Queen of Hearts, and Sing a S
... (38757 bytes in full, cut for the report)
10 more requests
POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 500, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": "g11052"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"g11053","title":"Minnie's Sacrifice"},{"id":"g11054","title":"Poems (1786), Volume I."},{"id":"g11055","title":"Lord Dolphin"},{"id":"g11056","title":"Trial and Triumph"},{"id":"g11057","title":"The Wife of his Youth and Other Stories of the Color Line, and Selected Essays"},{"id":"g11058","title":"Jack Archer: A Tale of the Crimea"},{"id":"g11059","title":"The Sylphs of the Season with Other Poems"},{"id":"g1106","title":"Titus Andronicus"},{"id":"g11060","title":"The Aspirations of Jean Servien"},{"id":"g11061","title":"The Atlantic Monthly, Volume 06, No. 34, August, 1860: A Magazine Of Literature, Art, And Politics"},{"id":"g11062","title":"The Dozen from Lakerim"},{"id":"g11063","title":"A man of mark"},{"id":"g11064","title":"Andromeda, and Other Poems"},{"id":"g11065","title":"Aunt Mary's Primer: Adorned with a Hundred and Twenty Pretty Pictures"},{"id":"g11066","title":"Graf von Loeben and the Legend of Lorelei: From \"Modern Philology\" vol. 13 (1915)"},{"id":"g11067","title":"Reform Cookery Book (4th edition): Up-To-Date Health Cookery for the Twentieth Century."},{"id":"g11068","title":"The Spirit of the Age; Or, Contemporary Portraits"},{"id":"g11069","title":"Squinty the Comical Pig: His Many Adventures"},{"id":"g1107","title":"The Taming of the Shrew"},{"id":"g11070","title":"La Fontana de Oro"},{"id":"g11071","title":"Naufragios de Alvar Núñez Cabeza de Vaca"},{"id":"g11072","title":"Jumalainen näytelmä: Kiirastuli"},{"id":"g11073","title":"The Illustrated Alphabet of Birds"},{"id":"g11074","title":"The Damned"},{"id":"g11075","title":"Der Mann im Nebel"},{"id":"g11076","title":"Punch, or the London Charivari, Volume 153, October 24, 1917"},{"id":"g11077","title":"Ebooks: Neither E, Nor Books: Paper for the O'Reilly Emerging Technologies Conference, 2004"},{"id":"g11078","title":"What Dress Makes of Us"},{"id":"g11079","title":"Essays in Rebellion"},{"id":"g1108","title":"The Two Gentlemen of Verona"},{"id":"g11080","title":"The Orations of Marcus Tullius Cicero, Volume 4"},{"id":"g11081","title":"Extracto de la gramatica mutsun"},{"id":"g11082","title":"Old Saint Paul's: A Tale of the Plague and the Fire"},{"id":"g11083","title":"The Parables of the Saviour: The Good Child's Library, Tenth Book"},{"id":"g11084","title":"Sonny, a Christmas Guest"},{"id":"g11085","title":"M. or N. \"Similia similibus curantur.\""},{"id":"g11086","title":"A Surgeon in Belgium"},{"id":"g11087","title":"The Atlantic Monthly, Volume 06, No. 35, September, 1860: A Magazine Of Literature, Art, And Politics"},{"id":"g11088","title":"English Men of Letters: Crabbe"},{"id":"g11089","title":"The Education of the Negro Prior to 1861: A History of the Education of the Colored People of the United States from the Beginning of Slavery to the Civil War"},{"id":"g1109","title":"Love's Labour's Lost"},{"id":"g11090","title":"Industrial Progress and Human Economics"},{"id":"g11091","title":"Poems"},{"id":"g11092","title":"The History of Tom Thumb and Other Stories."},{"id":"g11093","title":"Trailin'!"},{"id":"g11094","title":"Punch, or the London Charivari, Volume 156, March 12, 1919"},{"id":"g11095","title":"Fun and Nonsense"},{"id":"g11096","title":"Tales of Ind, and Other Poems"},{"id":"g11097","title":"Young Robin Hood"},{"id":"g11098","title":"Happy and Gay Marching Away"},{"id":"g11099","title":"More Seeds of Knowledge; Or, Another Peep at Charles"},{"id":"g111","title":"Freckles"},{"id":"g1110","title":"King John"},{"id":"g11100","title":"History of Modern Philosophy: From Nicolas of Cusa to the Present Time"},{"id":"g11101","title":"Coleridge's Ancient Mariner and Select Poems"},{"id":"g11102","title":"History of Negro Soldiers in the Spanish-American War, and Other Items of Interest"},{"id":"g11103","title":"The Atlantic Monthly, Volume 06, No. 37, November, 1860: A Magazine of Literature, Art, and Politics"},{"id":"g11104","title":"In Morocco"},{"id":"g11105","title":"Jack Mason, the Old Sailor"},{"id":"g11106","title":"The Girl at Cobhurst"},{"id":"g11107","title":"Theobald, the Iron-Hearted; Or, 
... (39546 bytes in full, cut for the report)
POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 500, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": "g11504"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"g11505","title":"All Things Considered"},{"id":"g11506","title":"The Old Bell of Independence; Or, Philadelphia in 1776"},{"id":"g11507","title":"The Lure of San Francisco: A Romance Amid Old Landmarks"},{"id":"g11508","title":"Reminiscences of a Pioneer"},{"id":"g11509","title":"The Life of Jesus Christ for the Young, Vol. 3"},{"id":"g1151","title":"The Nibelungenlied"},{"id":"g11510","title":"Fascinating San Francisco"},{"id":"g11511","title":"Robinsono Kruso"},{"id":"g11512","title":"O. Henry Memorial Award Prize Stories of 1921"},{"id":"g11513","title":"On Land and Sea at the Dardanelles"},{"id":"g11514","title":"Balcony Stories"},{"id":"g11515","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 532, February 4, 1832"},{"id":"g11516","title":"The Mirror of Literature, Amusement, and Instruction. Volume 14, No. 380, July 11, 1829"},{"id":"g11517","title":"Out of Doors—California and Oregon"},{"id":"g11518","title":"The Mirror of Literature, Amusement, and Instruction. Volume 14, No. 387, August 28, 1829"},{"id":"g11519","title":"The Mirror of Literature, Amusement, and Instruction. Volume 14, No. 383, August 1, 1829"},{"id":"g1152","title":"The Story of the Volsungs (Volsunga Saga); with Excerpts from the Poetic Edda"},{"id":"g11520","title":"The Obstacle Race"},{"id":"g11521","title":"A Beleaguered City: Being a Narrative of Certain Recent Events in the City of Semur, in the Department of the Haute Bourgogne. A Story of the Seen and the Unseen"},{"id":"g11522","title":"Deadly Pollen"},{"id":"g11523","title":"Behind the News: Voices from Goa's Press"},{"id":"g11524","title":"The Atlantic Monthly, Volume 08, No. 50, December, 1861: A Magazine of Literature, Art, and Politics"},{"id":"g11525","title":"The Atlantic Monthly, Volume 03, No. 18, April, 1859: A Magazine of Literature, Art, and Politics"},{"id":"g11526","title":"Summer on the Lakes, in 1843"},{"id":"g11527","title":"The World's Greatest Books — Volume 07 — Fiction"},{"id":"g11528","title":"The Mirror of Literature, Amusement, and Instruction. Volume 12, No. 341, November 15, 1828"},{"id":"g11529","title":"La Espuma: Obras completas de D. Armando Palacio Valdés, Tomo 7."},{"id":"g1153","title":"The Chessmen of Mars"},{"id":"g11530","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 529, January 14, 1832"},{"id":"g11531","title":"The Life of Marie de Medicis, Queen of France, Consort of Henri IV, and Regent of the Kingdom under Louis XIII — Volume 1"},{"id":"g11532","title":"A Kentucky Cardinal: A Story"},{"id":"g11533","title":"Theocritus, translated into English Verse"},{"id":"g11534","title":"The Lions of the Lord: A Tale of the Old West"},{"id":"g11535","title":"Views A-foot; Or, Europe Seen with Knapsack and Staff"},{"id":"g11536","title":"Town and Country Sermons"},{"id":"g11537","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 530, January 21, 1832"},{"id":"g11538","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 531, January 28, 1832"},{"id":"g11539","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 535, February 25, 1832"},{"id":"g1154","title":"The Voyages of Doctor Dolittle"},{"id":"g11540","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 536, March 3, 1832"},{"id":"g11541","title":"The Mirror of Literature, Amusement, and Instruction. Volume 20, No. 567, September 22, 1832"},{"id":"g11542","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 544, April 28, 1832"},{"id":"g11543","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 545, May 5, 1832"},{"id":"g11544","title":"Slave Narratives: A Folk History of Slavery in the United States from Interviews with Former Slaves, Volume II, Arkansas Narratives, Part 5"},{"id":"g11545","title":"Travels in the United States of America: Commencing in the Year 1793, and Ending in 1797. With the Author's Journals of his Two Voyages Across the Atlantic."},{"id":"g11
... (38627 bytes in full, cut for the report)
POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 500, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": "g1198"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"g11980","title":"A Tramp's Sketches"},{"id":"g11981","title":"The World's Great Sermons, Volume 01: Basil to Calvin"},{"id":"g11982","title":"Eighty Years and More; Reminiscences 1815-1897"},{"id":"g11983","title":"Poetic Sketches: A Collection of Miscellaneous Poetry"},{"id":"g11984","title":"A Pluralistic Universe: Hibbert Lectures at Manchester College on the Present Situation in Philosophy"},{"id":"g11985","title":"Russian Lyrics"},{"id":"g11986","title":"The Book of American Negro Poetry"},{"id":"g11987","title":"By Advice of Counsel"},{"id":"g11988","title":"The Human Chord"},{"id":"g11989","title":"The Crime of the French Café and Other Stories"},{"id":"g1199","title":"An Anthology of Australian Verse"},{"id":"g11990","title":"Shakespeare's Insomnia, and the Causes Thereof"},{"id":"g11991","title":"Po-No-Kah: An Indian Tale of Long Ago"},{"id":"g11992","title":"A Residence in France During the Years 1792, 1793, 1794 and 1795, Part I. 1792: Described in a Series of Letters from an English Lady: with General and Incidental Remarks on the French Character and Manners"},{"id":"g11993","title":"A Residence in France During the Years 1792, 1793, 1794 and 1795, Part II., 1793: Described in a Series of Letters from an English Lady: with General and Incidental Remarks on the French Character and Manners"},{"id":"g11994","title":"A Residence in France During the Years 1792, 1793, 1794 and 1795, Part III., 1794: Described in a Series of Letters from an English Lady: with General and Incidental Remarks on the French Character and Manners"},{"id":"g11995","title":"A Residence in France During the Years 1792, 1793, 1794 and 1795, Part IV., 1795: Described in a Series of Letters from an English Lady: with General and Incidental Remarks on the French Character and Manners"},{"id":"g11996","title":"A Residence in France During the Years 1792, 1793, 1794 and 1795, Complete: Described in a Series of Letters from an English Lady: with General and Incidental Remarks on the French Character and Manners"},{"id":"g11997","title":"Crusoes of the Frozen North"},{"id":"g11998","title":"Sight to the Blind"},{"id":"g11999","title":"The Servant in the House"},{"id":"g12","title":"Through the Looking-Glass"},{"id":"g120","title":"Treasure Island"},{"id":"g1200","title":"Gargantua and Pantagruel"},{"id":"g12000","title":"A Walk from London to John O'Groat's: With Notes by the Way"},{"id":"g12001","title":"Studies in Literature"},{"id":"g12002","title":"Review of the Work of Mr John Stuart Mill Entitled, 'Examination of Sir William Hamilton's Philosophy.'"},{"id":"g12003","title":"Extaze: Een Boek van Geluk"},{"id":"g12004","title":"Essays on some unsettled Questions of Political Economy"},{"id":"g12005","title":"Les Chants de Maldoror"},{"id":"g12006","title":"A Handbook to Agra and the Taj, Sikandra, Fatehpur-Sikri and the Neighbourhood"},{"id":"g12007","title":"Cousin Hatty's Hymns and Twilight Stories"},{"id":"g12008","title":"Geerten Basse"},{"id":"g12009","title":"Jean Jacques Rousseau: Een beeld van zijn leven en werken"},{"id":"g1201","title":"An Essay on the Trial By Jury"},{"id":"g12010","title":"The Fourth-Dimensional Reaches of the Exposition: San Francisco, 1915"},{"id":"g12011","title":"Monsieur Parent, et autres histoires courtes"},{"id":"g12012","title":"Drei Gaugöttinnen"},{"id":"g12013","title":"My Year of the War: Including an Account of Experiences with the Troops in France and the Record of a Visit to the Grand Fleet Which is Here Given for the First Time in its Complete Form"},{"id":"g12014","title":"The Lives of the Poets of Great Britain and Ireland (1753) Volume IV."},{"id":"g12015","title":"Love under Fire"},{"id":"g12016","title":"The Merchant of Berlin: An Historical Novel"},{"id":"g12017","title":"The Mirror of Literature, Amusement, and Instruction. Volume 13 — Index to Volume 13"},{"id":"g12018","title":"Notes and Queries, Number 17, February 23, 1850"},{"id":"g12019","title":"Queen Hortense: A Life Picture of the Napoleonic Era"},{"id":"g1202","title":"Tales of Unrest"},{"id":"g120
... (41221 bytes in full, cut for the report)
POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 500, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": "g12430"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"g12431","title":"The Coquette, or, The History of Eliza Wharton: A Novel: Founded on Fact"},{"id":"g12432","title":"Kalevalan avain"},{"id":"g12433","title":"Narrative of the Voyage of H.M.S. Rattlesnake, Commanded By the Late Captain Owen Stanley, R.N., F.R.S. Etc. During the Years 1846-1850. — Volume 1: Including Discoveries and Surveys in New Guinea, the Louisiade Archipelago, Etc. to Which Is Added the Account of Mr. E.B. Kennedy's Expedition for the Exploration of the Cape York Peninsula. By John Macgillivray, F.R.G.S. Naturalist to the Expedition."},{"id":"g12434","title":"Twelve Studies on the Making of a Nation: The Beginnings of Israel's History"},{"id":"g12435","title":"Paginas Sudamericanas"},{"id":"g12436","title":"The Night Horseman"},{"id":"g12437","title":"Histoire de St. Louis, Roi de France"},{"id":"g12438","title":"The Mirror of Literature, Amusement, and Instruction. Volume 12, No. 335, October 11, 1828"},{"id":"g12439","title":"Notes on Nursing: What It Is, and What It Is Not"},{"id":"g1244","title":"Love for Love: A Comedy"},{"id":"g12440","title":"D'Ri and I: A Tale of Daring Deeds in the Second War with the British.: Being the Memoirs of Colonel Ramon Bell, U.S.A."},{"id":"g12441","title":"The House of a Thousand Candles"},{"id":"g12442","title":"In the Days of My Youth: A Novel"},{"id":"g12443","title":"The jute industry"},{"id":"g12444","title":"Toaster's Handbook: Jokes, Stories, and Quotations"},{"id":"g12445","title":"The Water-Witch; Or, the Skimmer of the Seas: A Tale"},{"id":"g12446","title":"Il Designato: Romanzo"},{"id":"g12447","title":"Pauline"},{"id":"g12448","title":"L'Orco"},{"id":"g12449","title":"A Reputed Changeling; Or, Three Seventh Years Two Centuries Ago"},{"id":"g1245","title":"Night and Day"},{"id":"g12450","title":"The Reason Why"},{"id":"g12451","title":"De profundis! Episode Maritime"},{"id":"g12452","title":"Fort Lafayette or, Love and Secession: A Novel"},{"id":"g12453","title":"Miriam Monfort: A Novel"},{"id":"g12454","title":"France at War: On the Frontier of Civilization"},{"id":"g12455","title":"Legends of the Middle Ages: Narrated with Special Reference to Literature and Art"},{"id":"g12456","title":"The Troubadours"},{"id":"g12457","title":"El Diablo Cojuelo"},{"id":"g12458","title":"The Talisman, from the Russian of Alexander Pushkin; With Other Pieces"},{"id":"g12459","title":"Contes et poésies de Prosper Jourdan: 1854-1866"},{"id":"g1246","title":"The House of Dust: A Symphony"},{"id":"g12460","title":"Pomona's Travels: A Series of Letters to the Mistress of Rudder Grange from her Former Handmaiden"},{"id":"g12461","title":"Castles in the Air"},{"id":"g12462","title":"A Compilation of the Messages and Papers of the Presidents. Volume 6, part 1: Abraham Lincoln"},{"id":"g12463","title":"A Compilation of the Messages and Papers of the Presidents. Volume 4, part 3: James Knox Polk"},{"id":"g12464","title":"A Compilation of the Messages and Papers of the Presidents. Volume 4, part 2: John Tyler"},{"id":"g12465","title":"Punch, or the London Charivari, Volume 146, January 21, 1914"},{"id":"g12466","title":"Punch, or the London Charivari, Volume 99, September 20, 1890"},{"id":"g12467","title":"Punch, or the London Charivari, Volume 99, October 11, 1890"},{"id":"g12468","title":"Punch, or the London Charivari, Volume 99, October 25, 1890"},{"id":"g12469","title":"Punch, or the London Charivari, Volume 99, November 8, 1890"},{"id":"g1247","title":"Second April"},{"id":"g12470","title":"A Perilous Secret"},{"id":"g12471","title":"What I Remember, Volume 2"},{"id":"g12472","title":"Bataille de dames"},{"id":"g12473","title":"The German Classics of the Nineteenth and Twentieth Centuries, Volume 06: Masterpieces of German Literature Translated into English. in Twenty Volumes"},{"id":"g12474","title":"Write It Right: A Little Blacklist of Literary Faults"},{"id":"g12475","title":"Fires of Driftwood"},{"id":"g12476","title":"Ships that pass in the night"},{"id":"g12477","title":"The Mirror of Literature, Amusement, and Instruction. Volume 13
... (41195 bytes in full, cut for the report)
POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 500, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": "g12904"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"g12905","title":"Punch, or the London Charivari, Volume 99, December 13, 1890"},{"id":"g12906","title":"Canzio; Selman juonet"},{"id":"g12907","title":"Runot; Lyhyet kertomukset"},{"id":"g12908","title":"Missing"},{"id":"g12909","title":"Romance of the Rabbit"},{"id":"g1291","title":"Herodias"},{"id":"g12910","title":"Early Britain—Roman Britain"},{"id":"g12911","title":"A Backward Glance at Eighty: Recollections & Comment"},{"id":"g12912","title":"The Price of Love"},{"id":"g12913","title":"Moral Science; a Compendium of Ethics"},{"id":"g12914","title":"One Hundred Best Books: With Commentary and an Essay on Books and Reading"},{"id":"g12915","title":"The White Devil"},{"id":"g12916","title":"The Secret History of the Court of Justinian"},{"id":"g12917","title":"Punch, or the London Charivari, Volume 99, December 20, 1890"},{"id":"g12918","title":"Iranian Influence on Moslem Literature, Part I"},{"id":"g12919","title":"A Texas Matchmaker"},{"id":"g1292","title":"The Way of the World"},{"id":"g12920","title":"The \"Goldfish\": Being the Confessions af a Successful Man"},{"id":"g12921","title":"Gesammelte Werke in fünf Bänden — 1. Band"},{"id":"g12922","title":"Burke"},{"id":"g12923","title":"The Laird's Luck and Other Fireside Tales"},{"id":"g12924","title":"The World's Best Poetry, Volume 08: National Spirit"},{"id":"g12925","title":"The World's Best Poetry, Volume 10: Poetical Quotations"},{"id":"g12926","title":"The Morris Book, Part 1: A History of Morris Dancing, With a Description of Eleven Dances as Performed by the Morris-Men of England"},{"id":"g12927","title":"Charaktere und Schicksale"},{"id":"g12928","title":"Three Expeditions into the Interior of Eastern Australia, Volume 1: With Descriptions of the Recently Explored Region of Australia Felix, and of the Present Colony of New South Wales"},{"id":"g12929","title":"A Voyage to Terra Australis — Volume 1: Undertaken for the purpose of completing the discovery of that vast country, and prosecuted in the years 1801, 1802 and 1803, in His Majesty's ship the Investigator, and subsequently in the armed vessel Porpoise and Cumberland schooner"},{"id":"g1293","title":"Sesame and Lilies"},{"id":"g12930","title":"Publications of the Scottish History Society, Volume 36: Journals of Sir John Lauder Lord Fountainhall with His Observations on Public Affairs and Other Memoranda 1665-1676"},{"id":"g12931","title":"The Daredevil"},{"id":"g12932","title":"Four Max Carrados Detective Stories"},{"id":"g12933","title":"Little Journeys to the Homes of the Great - Volume 01: Little Journeys to the Homes of Good Men and Great"},{"id":"g12934","title":"Punch, or the London Charivari, Volume 99, November 1, 1890"},{"id":"g12935","title":"The Song of the Blood-Red Flower"},{"id":"g12936","title":"Young Hunters of the Lake; or, Out with Rod and Gun"},{"id":"g12937","title":"Out with Gun and Camera; or, The Boy Hunters in the Mountains"},{"id":"g12938","title":"The Brighton Boys with the Flying Corps"},{"id":"g12939","title":"The Brighton Boys with the Submarine Fleet"},{"id":"g1294","title":"The Firm of Nucingen"},{"id":"g12940","title":"The Chums of Scranton High out for the Pennant: or, In the Three Town League"},{"id":"g12941","title":"The Scranton High Chums on the Cinder Path: Or, The Mystery of the Haunted Quarry"},{"id":"g12942","title":"The Highland Fling and How to Teach it"},{"id":"g12943","title":"The Hilltop Boys on the River"},{"id":"g12944","title":"Punch, or the London Charivari, Volume 99, December 27, 1890"},{"id":"g12945","title":"The Boy Scouts of the Geological Survey"},{"id":"g12946","title":"The Boy Scouts on Picket Duty"},{"id":"g12947","title":"The Boy Scouts of the Flying Squadron"},{"id":"g12948","title":"The Boy Scouts with the Motion Picture Players"},{"id":"g12949","title":"Contes Français"},{"id":"g1295","title":"Ceres' Runaway, and Other Essays"},{"id":"g12950","title":"L'Immortel: Moeurs parisiennes"},{"id":"g12951","title":"Punch, or the London Charivari, Volume 100, January 10, 1891"},{"id":"g12952","title":"Four Boy Hun
... (41998 bytes in full, cut for the report)
POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 500, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": "g13358"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"g13359","title":"The Mirror of Literature, Amusement, and Instruction. Volume 14, No. 391, September 26, 1829"},{"id":"g1336","title":"Shelley: An Essay"},{"id":"g13360","title":"Missionary Survey As An Aid To Intelligent Co-Operation In Foreign Missions"},{"id":"g13361","title":"Notes and Queries, Number 36, July 6, 1850"},{"id":"g13362","title":"Notes and Queries, Number 38, July 20, 1850"},{"id":"g13363","title":"The Parish Clerk"},{"id":"g13364","title":"Matthew Arnold's Sohrab and Rustum, and other poems"},{"id":"g13365","title":"The Ethics of Drink and Other Social Questions; Or, Joints In Our Social Armour"},{"id":"g13366","title":"A General History and Collection of Voyages and Travels — Volume 08"},{"id":"g13367","title":"Hills and the Sea"},{"id":"g13368","title":"Korea's Fight for Freedom"},{"id":"g13369","title":"The Lost Ambassador; Or, The Search For The Missing Delora"},{"id":"g1337","title":"Shelley"},{"id":"g13370","title":"Q. E. D., or New Light on the Doctrine of Creation"},{"id":"g13371","title":"Folkungaträdet"},{"id":"g13372","title":"The Gloved Hand"},{"id":"g13373","title":"Punch, or the London Charivari, Volume 100, June 13, 1891"},{"id":"g13374","title":"Consuelo, Tome 3 (1861)"},{"id":"g13375","title":"The Rival Heirs; being the Third and Last Chronicle of Aescendune"},{"id":"g13376","title":"Our Legal Heritage, King AEthelbert, 596 to King George III, 1775"},{"id":"g13377","title":"A tour through some parts of France, Switzerland, Savoy, Germany and Belgium, during the summer and autumn of 1814"},{"id":"g13378","title":"De baanwachter"},{"id":"g13379","title":"The Two Elsies: A Sequel to Elsie at Nantucket"},{"id":"g1338","title":"Selected Prose of Oscar Wilde"},{"id":"g13380","title":"Gabriel"},{"id":"g13381","title":"A General History and Collection of Voyages and Travels — Volume 14"},{"id":"g13382","title":"The Mirror of Literature, Amusement, and Instruction. Volume 17, No. 496, June 27, 1831"},{"id":"g13383","title":"Les Pardaillan — Tome 03 : La Fausta"},{"id":"g13384","title":"The Covered Wagon"},{"id":"g13385","title":"Comte du Pape"},{"id":"g13386","title":"Vechter"},{"id":"g13387","title":"Shakespeare: His Life, Art, And Characters, Volume I.: With An Historical Sketch Of The Origin And Growth Of The Drama In England"},{"id":"g13388","title":"The Religious Spirit of the Slavs: Three Lectures Given in Lent, 1916"},{"id":"g13389","title":"Notes and Queries, Number 40, August 3, 1850"},{"id":"g1339","title":"Salomé"},{"id":"g13390","title":"Punch, or the London Charivari, Volume 100, May 30, 1891"},{"id":"g13391","title":"Punch, or the London Charivari, Volume 100, June 6, 1891"},{"id":"g13392","title":"A Woman's Impression of the Philippines"},{"id":"g13393","title":"Notes and Queries, Number 41, August 10, 1850"},{"id":"g13394","title":"Elämän meri"},{"id":"g13395","title":"Since Cézanne"},{"id":"g13396","title":"Sweetapple Cove"},{"id":"g13397","title":"History of the Comstock Patent Medicine Business and Dr. Morse's Indian Root Pills"},{"id":"g13398","title":"The Evolution of \"Dodd\": A pedagogical story giving his struggle for the survival of the fittest, tracing his chances, his changes, and how he came out"},{"id":"g13399","title":"Scientific American Supplement, No. 530, February 27, 1886"},{"id":"g134","title":"Maria; Or, The Wrongs of Woman"},{"id":"g1340","title":"Autobiography of Andrew Dickson White — Volume 1"},{"id":"g13400","title":"Conscience"},{"id":"g13401","title":"Scientific American Supplement, No. 520, December 19, 1885"},{"id":"g13402","title":"The Hindu-Yogi Science of Breath"},{"id":"g13403","title":"English Travellers of the Renaissance"},{"id":"g13404","title":"Tom Tufton's Travels"},{"id":"g13405","title":"The Travels and Adventures of Monsieur Violet in California, Sonora, and Western Texas"},{"id":"g13406","title":"Notes and Queries, Number 43, August 24, 1850"},{"id":"g13407","title":"A Series of Lessons in Gnani Yoga: The Yoga of Wisdom"},{"id":"g13408","title":"Our Stage and Its Critics: By \"E.F.S.\" of \"The Westmin
... (38573 bytes in full, cut for the report)
POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 500, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": "g1381"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"g13810","title":"Tristan"},{"id":"g13811","title":"Peter Stuyvesant, the Last Dutch Governor of New Amsterdam"},{"id":"g13812","title":"Sir Mortimer: A Novel"},{"id":"g13813","title":"The Common Law"},{"id":"g13814","title":"The Development of the Feeling for Nature in the Middle Ages and Modern Times"},{"id":"g13815","title":"The Talking Beasts: A Book of Fable Wisdom"},{"id":"g13816","title":"The Jericho Road"},{"id":"g13817","title":"With Marlborough to Malplaquet"},{"id":"g13818","title":"Jacques"},{"id":"g13819","title":"Les compagnons de Jéhu"},{"id":"g1382","title":"Poems — Volume 2"},{"id":"g13820","title":"Unhappy Far-Off Things"},{"id":"g13821","title":"Tales of Wonder"},{"id":"g13822","title":"Notes and Queries, Number 26, April 27, 1850"},{"id":"g13823","title":"Lady Merton, Colonist"},{"id":"g13824","title":"The National Preacher, Vol. 2 No. 7 Dec. 1827: Or Original Monthly Sermons from Living Ministers, Sermons XXVI. and: XXVII."},{"id":"g13825","title":"Sapho"},{"id":"g13826","title":"A Gunner Aboard the \"Yankee\": From the Diary of Number Five of the After Port Gun (Russell Doubleday): The Yarn of the Cruise and Fights of the Naval Reserves in the Spanish-American War"},{"id":"g13827","title":"Fields of Victory"},{"id":"g13828","title":"Lippincott's Magazine of Popular Literature and Science, Volume 12, No. 29, August, 1873"},{"id":"g13829","title":"The Mirror of Literature, Amusement, and Instruction. Volume 17, No. 475, February 5, 1831"},{"id":"g1383","title":"Poems — Volume 3"},{"id":"g13830","title":"The Wreck of the Hesperus"},{"id":"g13831","title":"Evolution Of The Japanese, Social And Psychic"},{"id":"g13832","title":"Romance of California Life: Illustrated by Pacific Slope Stories, Thrilling, Pathetic and Humorous"},{"id":"g13833","title":"Blackfeet Indian Stories"},{"id":"g13834","title":"À se tordre: Histoires chatnoiresques"},{"id":"g13835","title":"The Amulet"},{"id":"g13836","title":"Wide Courses"},{"id":"g13837","title":"Correspondance, 1812-1876 — Tome 2"},{"id":"g13838","title":"Correspondance, 1812-1876 — Tome 3"},{"id":"g13839","title":"Correspondance, 1812-1876 — Tome 5"},{"id":"g1384","title":"The Ayrshire Legatees; Or, The Pringle Family"},{"id":"g13840","title":"The Sign of the Red Cross: A Tale of Old London"},{"id":"g13841","title":"Oberheim (Voices): A Chronicle of War"},{"id":"g13842","title":"The Story of Manhattan"},{"id":"g13843","title":"Libretto: La Bohème"},{"id":"g13844","title":"No. 13 Washington Square"},{"id":"g13845","title":"Manasse Jäppinen"},{"id":"g13846","title":"Discours de la méthode"},{"id":"g13847","title":"Slave Narratives: A Folk History of Slavery in the United States from Interviews with Former Slaves. Administrative Files: Selected Records Bearing on the History of the Slave Narratives"},{"id":"g13848","title":"Les diaboliques"},{"id":"g13849","title":"Panu: Näytelmä"},{"id":"g1385","title":"Lin McLean"},{"id":"g13850","title":"Panu"},{"id":"g13851","title":"The Downfall"},{"id":"g13852","title":"Literary Taste: How to Form It: With Detailed Instructions for Collecting a Complete Library of English Literature"},{"id":"g13853","title":"New National First Reader"},{"id":"g13854","title":"The Old Franciscan Missions Of California"},{"id":"g13855","title":"Une politique européenne : la France, la Russie, l'Allemagne et la guerre au Transvaal"},{"id":"g13856","title":"La reine Margot - Tome I"},{"id":"g13857","title":"La reine Margot - Tome II"},{"id":"g13858","title":"The Laws of War, Affecting Commerce and Shipping"},{"id":"g13859","title":"Boy Scouts in Southern Waters; Or, Spaniard's Treasure Chest"},{"id":"g1386","title":"Lady Baltimore"},{"id":"g13860","title":"Men of the Bible; Some Lesser-Known Characters"},{"id":"g13861","title":"Adolphe"},{"id":"g13862","title":"Le neveu de Rameau"},{"id":"g13863","title":"Regrets sur ma vieille robe de chambre: Ou, avis à ceux qui ont plus de goût que de fortune"},{"id":"g13864","title":"The Bay State Monthly — Volume 2, No. 3, December, 1884"},{"id":"g13865","title":"Chambers's 
... (37611 bytes in full, cut for the report)
POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 500, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": "g1426"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"books":{"items":[{"id":"g14260","title":"The Great Events by Famous Historians, Volume 06: (From Barbarossa to Dante)"},{"id":"g14261","title":"Alton of Somasco: A Romance of the Great Northwest"},{"id":"g14262","title":"The Shadow of a Crime: A Cumbrian Romance"},{"id":"g14263","title":"Katrine: A Novel"},{"id":"g14264","title":"The Practice and Science of Drawing"},{"id":"g14265","title":"The Philippine Islands, 1493-1898 — Volume 09 of 55: 1593-1597: Explorations by Early Navigators, Descriptions of the Islands and Their Peoples, Their History and Records of the Catholic Missions, as Related in Contemporaneous Books and Manuscripts, Showing the Political, Economic, Commercial and Religious Conditions of Those Islands from Their Earliest Relations with European Nations to the Close of the Nineteenth Century"},{"id":"g14266","title":"The Philippine Islands, 1493-1898 — Volume 10 of 55: 1597-1599: Explorations by Early Navigators, Descriptions of the Islands and Their Peoples, Their History and Records of the Catholic Missions, as Related in Contemporaneous Books and Manuscripts, Showing the Political, Economic, Commercial and Religious Conditions of Those Islands from Their Earliest Relations with European Nations to the Close of the Nineteenth Century"},{"id":"g14267","title":"Heräämiseni"},{"id":"g14268","title":"Historia Calamitatum"},{"id":"g14269","title":"Aan de Zuidpool: De Aarde en haar Volken, 1913"},{"id":"g1427","title":"A Drama on the Seashore"},{"id":"g14270","title":"Panayam ng Tatlong Binata — Unang Hati"},{"id":"g14271","title":"Panayam ng Tatlong Binata — Ikalawang Hati"},{"id":"g14272","title":"Punch, Or The London Charivari, Volume 102, January 30, 1892"},{"id":"g14273","title":"Invisible Links"},{"id":"g14274","title":"Lincoln's Inaugurals, Addresses and Letters (Selections)"},{"id":"g14275","title":"The Necromancers"},{"id":"g14276","title":"Italian Journeys"},{"id":"g14277","title":"Punch, or the London Charivari, Volume 100, April 25, 1891"},{"id":"g14278","title":"The Radio Boys on the Mexican Border"},{"id":"g14279","title":"The Ancient Life History of the Earth: A Comprehensive Outline of the Principles and Leading Facts of Palæontological Science"},{"id":"g1428","title":"La Grenadiere"},{"id":"g14280","title":"Holidays at Roselands: A Sequel to Elsie Dinsmore"},{"id":"g14281","title":"Grashalmen"},{"id":"g14282","title":"A Merry Dialogue Declaringe the Properties of Shrowde Shrews and Honest Wives"},{"id":"g14283","title":"Dew Drops, Vol. 37, No. 16, April 19, 1914"},{"id":"g14284","title":"Truxton King: A Story of Graustark"},{"id":"g14285","title":"L'Iliade"},{"id":"g14286","title":"L'Odyssée"},{"id":"g14287","title":"L'île mystérieuse"},{"id":"g14288","title":"Mademoiselle de Maupin"},{"id":"g14289","title":"The Life of Napoleon I (Volume 1 of 2)"},{"id":"g1429","title":"The Garden Party, and Other Stories"},{"id":"g14290","title":"The Life of Napoleon I (Volume 2 of 2)"},{"id":"g14291","title":"The Story of Geographical Discovery: How the World Became Known"},{"id":"g14292","title":"Murtavia voimia"},{"id":"g14293","title":"The Complete Book of Cheese"},{"id":"g14294","title":"New Ideas in India During the Nineteenth Century: A Study of Social, Political, and Religious Developments"},{"id":"g14295","title":"Letters on International Copyright; Second Edition"},{"id":"g14296","title":"As Farpas: Chronica Mensal da Politica, das Letras e dos Costumes (1882-11/12)"},{"id":"g14297","title":"The Congo and Coasts of Africa"},{"id":"g14298","title":"The Art of Interior Decoration"},{"id":"g14299","title":"Native Races and the War"},{"id":"g143","title":"The Mayor of Casterbridge"},{"id":"g1430","title":"Beautiful Stories from Shakespeare"},{"id":"g14300","title":"The Life of Napoleon I (Complete)"},{"id":"g14301","title":"Atlantida"},{"id":"g14302","title":"Principles of Home Decoration, With Practical Examples"},{"id":"g14303","title":"Queed: A Novel"},{"id":"g14304","title":"The Tale of Peter Rabbit"},{"id":"g14305","title":"Layamon's Brut"},{"id":"g14306","title":"Väkinäinen naiminen"
... (37206 bytes in full, cut for the report)
POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 1, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": "g1000a"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [],
      "total": 78090,
      "hasMore": false,
      "cursor": null
    }
  }
}
POST /graphql
content-type: application/json

{
  "query": "query($after: String) { books(first: 1, after: $after) { items { id title } total hasMore cursor } }",
  "variables": {
    "after": "g1471"
  }
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "books": {
      "items": [
        {
          "id": "g14710",
          "title": "Uncle Titus and His Visit to the Country"
        }
      ],
      "total": 78090,
      "hasMore": true,
      "cursor": "g14710"
    }
  }
}

Rayfold 18 requests

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
      "op": "books",
... 41 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"items":[{"id":"b1","title":"The Dispossessed"},{"id":"b2","title":"Invisible Cities"},{"id":"b3","title":"Kindred"},{"id":"b4","title":"A Wizard of Earthsea"},{"id":"g1","title":"The Declaration of Independence of the United States of America"},{"id":"g10","title":"The King James Version of the Bible"},{"id":"g100","title":"The Complete Works of William Shakespeare"},{"id":"g1000","title":"La Divina Commedia di Dante: Complete"},{"id":"g10000","title":"The Magna Carta"},{"id":"g10001","title":"Apocolocyntosis"},{"id":"g10002","title":"The House on the Borderland"},{"id":"g10003","title":"My First Years as a Frenchwoman, 1876-1879"},{"id":"g10004","title":"The Warriors"},{"id":"g10005","title":"A Voyage to the Moon: With Some Account of the Manners and Customs, Science and Philosophy, of the People of Morosofia, and Other Lunarians"},{"id":"g10006","title":"La Fiammetta"},{"id":"g10007","title":"Carmilla"},{"id":"g10008","title":"The Mystery"},{"id":"g10009","title":"Wild Northern Scenes; Or, Sporting Adventures with the Rifle and the Rod"},{"id":"g1001","title":"Divine Comedy, Longfellow's Translation, Hell"},{"id":"g10010","title":"The Eulogies of Howard: A Vision"},{"id":"g10011","title":"365 Foreign Dishes: A Foreign Dish for Every Day in the Year"},{"id":"g10012","title":"The Mountains of California"},{"id":"g10013","title":"Punchinello, Volume 1, No. 09, May 28, 1870"},{"id":"g10014","title":"Punchinello, Volume 1, No. 18, July 30, 1870"},{"id":"g10015","title":"Punchinello, Volume 1, No. 19, August 6, 1870"},{"id":"g10016","title":"Punchinello, Volume 1, No. 21, August 20, 1870"},{"id":"g10017","title":"Punchinello, Volume 1, No. 23, September 3, 1870"},{"id":"g10018","title":"Punchinello, Volume 1, No. 05, April 30, 1870"},{"id":"g10019","title":"Punchinello, Volume 1, No. 22, August 27, 1870"},{"id":"g1002","title":"Divine Comedy, Longfellow's Translation, Purgatory"},{"id":"g10020","title":"The Strand Magazine: Vol. 07, Issue 37, January, 1894.: An Illustrated Monthly"},{"id":"g10021","title":"Tenterhooks"},{"id":"g10022","title":"White Queen of the Cannibals: the Story of Mary Slessor of Calabar"},{"id":"g10023","title":"There's Pippins and Cheese to Come"},{"id":"g10024","title":"Beneath the Banner: Being Narratives of Noble Lives and Brave Deeds"},{"id":"g10025","title":"Gaslight Sonatas"},{"id":"g10026","title":"The Mirror of Literature, Amusement, and Instruction. Volume 10, No. 268, August 11, 1827"},{"id":"g10027","title":"The Triple Alliance, Its Trials and Triumphs"},{"id":"g10028","title":"Spalding's Official Baseball Guide - 1913"},{"id":"g10029","title":"The Hunt Ball Mystery"},{"id":"g1003","title":"Divine Comedy, Longfellow's Translation, Paradise"},{"id":"g10030","title":"The Life of Hon. William F. Cody, Known as Buffalo Bill, the Famous Hunter, Scout and Guide: An Autobiography"},{"id":"g10031","title":"The Complete Poetical Works of Edgar Allan Poe: Including Essays on Poetry"},{"id":"g10032","title":"Punchinello, Volume 1, No. 24, September 10, 1870"},{"id":"g10033","title":"Punchinello, Volume 1, No. 25, September 17, 1870"},{"id":"g10034","title":"Punchinello, Volume 1, No. 26, September 24, 1870"},{"id":"g10035","title":"Punchinello, Volume 2, No. 27, October 1, 1870"},{"id":"g10036","title":"Punchinello, Volume 2, No. 28, October 8, 1870"},{"id":"g10037","title":"A Beautiful Possibility"},{"id":"g10038","title":"The Magnetic North"},{"id":"g10039","title":"The Works of Aphra Behn, Volume III"},{"id":"g1004","title":"Divine Comedy, Longfellow's Translation, Complete"},{"id":"g10040","title":"Aleutian Indian and English Dictionary: Common Words in the Dialects of the Aleutian Indian Language as Spoken by the Oogashik, Egashik, Anangashuk and Misremie Tribes Around Sulima River and Neighboring Parts of the Alaska Peninsula"},{"id":"g10041","title":"The Rivet in Grandfather's Neck: A Comedy of Limitations"},{"id":"g10042","title":"The child under eight"},{"id":"g10043","title":"Klondyke Nuggets: A Brief Description of the Great Gold Regions in the Northwest"},{"id":"g10044","t
... (60718 bytes in full, cut for the report)
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "1.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 3,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "2.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 4,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "3.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": "g10871"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
... 42 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"items":[{"id":"g10872","title":"At Sunwich Port, Part 2.: Contents: Chapters 6-10"},{"id":"g10873","title":"At Sunwich Port, Part 3.: Contents: Chapters 11-15"},{"id":"g10874","title":"At Sunwich Port, Part 4.: Contents: Chapters 16-20"},{"id":"g10875","title":"At Sunwich Port, Part 5.: Contents: Chapters 21-25"},{"id":"g10876","title":"At Sunwich Port [complete]"},{"id":"g10877","title":"The Tragedies of the Medici"},{"id":"g10878","title":"The Mule: A Treatise on the Breeding, Training, and Uses to Which He May Be Put"},{"id":"g10879","title":"A Compilation of the Messages and Papers of the Presidents. Volume 2, part 2: John Quincy Adams"},{"id":"g1088","title":"Rolf in the Woods"},{"id":"g10880","title":"Teddy's Button"},{"id":"g10881","title":"Crescent and Iron Cross"},{"id":"g10882","title":"The Eagle's Shadow"},{"id":"g10883","title":"Dio's Rome, Volume 4: An Historical Narrative Originally Composed in Greek During the Reigns of Septimius Severus, Geta and Caracalla, Macrinus, Elagabalus and Alexander Severus: and Now Presented in English Form"},{"id":"g10884","title":"A Publisher and His Friends: Memoir and Correspondence of John Murray; with an Account of the Origin and Progress of the House, 1768-1843"},{"id":"g10885","title":"Stories from the Italian Poets: with Lives of the Writers, Volume 1"},{"id":"g10886","title":"The Untamed"},{"id":"g10887","title":"Babylonian and Assyrian Literature"},{"id":"g10888","title":"Arthur Hamilton, and His Dog"},{"id":"g10889","title":"The Life and Romances of Mrs. Eliza Haywood"},{"id":"g1089","title":"Moon-Face, and Other Stories"},{"id":"g10890","title":"Dio's Rome, Volume 5: An Historical Narrative Originally Composed in Greek During The Reigns of Septimius Severus, Geta and Caracalla, Macrinus, Elagabalus and Alexander Severus: and Now Presented in English Form"},{"id":"g10891","title":"Algonquin Indian Tales"},{"id":"g10892","title":"Dawn"},{"id":"g10893","title":"A Compilation of the Messages and Papers of the Presidents. Volume 1, part 3: Thomas Jefferson"},{"id":"g10894","title":"A Compilation of the Messages and Papers of the Presidents. Volume 1, part 2: John Adams"},{"id":"g10895","title":"A Compilation of the Messages and Papers of the Presidents. Volume 1, part 4: James Madison"},{"id":"g10896","title":"The Mirror of Literature, Amusement, and Instruction. Volume 10, No. 283, November 17, 1827"},{"id":"g10897","title":"The Wendigo"},{"id":"g10898","title":"American Scenes, and Christian Slavery: A Recent Tour of Four Thousand Miles in the United States"},{"id":"g10899","title":"Olivia in India"},{"id":"g109","title":"Renascence, and Other Poems"},{"id":"g1090","title":"The Bickerstaff-Partridge Papers"},{"id":"g10900","title":"The King James Bible"},{"id":"g10901","title":"Three Young Knights"},{"id":"g10902","title":"Big and Little Sisters: A Story of an Indian Mission School"},{"id":"g10903","title":"Punch, or the London Charivari, Volume 153, October 17, 1917"},{"id":"g10904","title":"Frank Merriwell's Nobility; Or, The Tragedy of the Ocean Tramp"},{"id":"g10905","title":"Phantom Fortune, a Novel"},{"id":"g10906","title":"Quinze Jours en Égypte"},{"id":"g10907","title":"The History of Rome, Books 09 to 26"},{"id":"g10908","title":"Manual for Noncommissioned Officers and Privates of Infantry of the Army of the United States, 1917: To be used by Engineer companies (dismounted) and Coast Artillery companies for Infantry instruction and training"},{"id":"g10909","title":"Los Amantes de Teruel: Drama en cuatro actos en verso y prosa"},{"id":"g1091","title":"On Heroes, Hero-Worship, and the Heroic in History"},{"id":"g10910","title":"Robert Louis Stevenson, an Elegy; and Other Poems"},{"id":"g10911","title":"Buried Alive: A Tale of These Days"},{"id":"g10912","title":"The Infant's Delight: Poetry"},{"id":"g10913","title":"English Poems"},{"id":"g10914","title":"Die Brüder Wright: Eine Studie ueber die Entwicklung der Flugmaschine von Lilienthal bis Wright"},{"id":"g10915","title":"The Girl's Cabinet of Instructive and Moral Stories"},{"id":"g10916","
... (62553 bytes in full, cut for the report)
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": "g10871"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "1.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 3,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "2.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 4,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "3.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
16 more requests
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": "g11595"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
... 42 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"items":[{"id":"g11596","title":"La Maison Tellier"},{"id":"g11597","title":"Mlle Fifi: Nouveaux Contes"},{"id":"g11598","title":"La Montaña"},{"id":"g11599","title":"Withered Leaves from Memory's Garland"},{"id":"g1160","title":"The Game"},{"id":"g11600","title":"The Life of Marie de Medicis, Queen of France, Consort of Henri IV, and Regent of the Kingdom under Louis XIII — Volume 2"},{"id":"g11601","title":"The Life of Marie de Medicis, Queen of France, Consort of Henri IV, and Regent of the Kingdom under Louis XIII — Volume 3"},{"id":"g11602","title":"The World of Ice"},{"id":"g11603","title":"The House of Cobwebs and Other Stories"},{"id":"g11604","title":"The Atlantic Monthly, Volume 06, No. 33, July, 1860: A Magazine Of Literature, Art, And Politics"},{"id":"g11605","title":"The Appetite of Tyranny: Including Letters to an Old Garibaldian"},{"id":"g11606","title":"The Atlantic Monthly, Volume 03, No. 16, February, 1859: A Magazine of Literature, Art, and Politics"},{"id":"g11607","title":"Dio's Rome, Volume 2: An Historical Narrative Originally Composed in Greek During the Reigns of Septimius Severus, Geta and Caracalla, Macrinus, Elagabalus and Alexander Severus: and Now Presented in English Form"},{"id":"g11608","title":"From a Girl's Point of View"},{"id":"g11609","title":"The Golden Canyon"},{"id":"g1161","title":"Jerry of the Islands"},{"id":"g11610","title":"Madam Crowl's Ghost and the Dead Sexton"},{"id":"g11611","title":"The Mirror of Literature, Amusement, and Instruction. Volume 13, No. 374, June 6, 1829"},{"id":"g11612","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 550, June 2, 1832"},{"id":"g11613","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 551, June 9, 1832"},{"id":"g11614","title":"The Second Generation"},{"id":"g11615","title":"The Grammar of English Grammars"},{"id":"g11616","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 552, June 16, 1832"},{"id":"g11617","title":"Punch, or the London Charivari, Volume 156, April 2, 1919"},{"id":"g11618","title":"From Chaucer to Tennyson: With Twenty-Nine Portraits and Selections from Thirty Authors"},{"id":"g11619","title":"Punch, or the London Charivari, Volume 153, November 21, 1917"},{"id":"g1162","title":"The Jacket (The Star-Rover)"},{"id":"g11620","title":"My Brilliant Career"},{"id":"g11621","title":"Le Mauvais Génie"},{"id":"g11622","title":"Plus fort que Sherlock Holmès"},{"id":"g11623","title":"The Dramatic Works of John Dryden, Volume 1: With a Life of the Author"},{"id":"g11624","title":"The Reflections of Ambrosine: A Novel"},{"id":"g11625","title":"The Wrong Twin"},{"id":"g11626","title":"The Dawn of All"},{"id":"g11627","title":"The World's Great Sermons, Volume 02: Hooker to South"},{"id":"g11628","title":"Gossip in a Library"},{"id":"g11629","title":"Punch, or the London Charivari, Volume 153, December 26, 1917"},{"id":"g1163","title":"Adventure"},{"id":"g11630","title":"Punch, or the London Charivari, Volume 156, June 18, 1919"},{"id":"g11631","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 553, June 23, 1832"},{"id":"g11632","title":"Woman: Man's Equal"},{"id":"g11633","title":"Parsifal: A Mystical Drama by Richard Wagner Retold in the Spirit of the Bayreuth Interpretation"},{"id":"g11634","title":"Human Nature in Politics: Third Edition"},{"id":"g11635","title":"Green Tea; Mr. Justice Harbottle"},{"id":"g11636","title":"Notes and Queries, Number 05, December 1, 1849"},{"id":"g11637","title":"The Mirror of Literature, Amusement, and Instruction. Volume 20, No. 558, July 21, 1832"},{"id":"g11638","title":"Punch, or the London Charivari, Volume 153, July 18, 1917"},{"id":"g11639","title":"Figures of Earth: A Comedy of Appearances"},{"id":"g1164","title":"The iron heel"},{"id":"g11640","title":"Love and Mr. Lewisham"},{"id":"g11641","title":"Over There: War Scenes on the Western Front"},{"id":"g11642","title":"What to See in England: A Guide to Places of Historic Interest, Natural Beauty or Literary Associa
... (62317 bytes in full, cut for the report)
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": "g11595"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "1.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 3,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "2.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 4,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "3.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": "g12340"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
... 42 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"items":[{"id":"g12341","title":"Against the Grain"},{"id":"g12342","title":"The Nuttall encyclopædia"},{"id":"g12343","title":"The Art of Iugling or Legerdemaine: Wherein is Deciphered All the Conueyances of Legerdemaine and Iugling, How They Are Effected, and Wherin They Chiefly Consist; Cautions to Beware of Cheating at Cardes and Dice, the Detection of the Beggerly Art of Alcumistry, and the Foppery of Foolish Cousoning Charmes, All Tending to Mirth and Recreation, Especially for Those That Desire to Haue the Insight and Priuate Practise Thereof"},{"id":"g12344","title":"Sir Robert Hart"},{"id":"g12345","title":"Friday, the Thirteenth: A Novel"},{"id":"g12346","title":"A Roman Singer"},{"id":"g12347","title":"The Morgesons: A Novel"},{"id":"g12348","title":"Richard Vandermarck: A Novel"},{"id":"g12349","title":"The Secret City"},{"id":"g1235","title":"Captain Fracasse"},{"id":"g12350","title":"The International Jewish Cook Book: 1600 Recipes According to the Jewish Dietary Laws with the Rules for Kashering;: the Favorite Recipes of America, Austria, Germany, Russia, France, Poland, Roumania, Etc., Etc."},{"id":"g12351","title":"The German Classics of the Nineteenth and Twentieth Centuries, Volume 07: Masterpieces of German Literature Translated into English. in Twenty Volumes"},{"id":"g12352","title":"Iola Leroy; Or, Shadows Uplifted"},{"id":"g12353","title":"The Making of Religion"},{"id":"g12354","title":"Pink and White Tyranny: A Society Novel"},{"id":"g12355","title":"The Constitutional Development of Japan 1853-1881: Johns Hopkins University Studies in Historical and Political Science, Ninth Series"},{"id":"g12356","title":"Bref récit et succincte narration de la navigation faite en MDXXXV et MDXXXVI par le capitaine Jacques Cartier aux îles de Canada, Hochelaga, Saguenay et autres"},{"id":"g12357","title":"The Case and the Girl"},{"id":"g12358","title":"Preliminary Announcement & List of Members: Society for Pure English, Tract 01 (1919)"},{"id":"g12359","title":"The Meaning of Infancy"},{"id":"g1236","title":"First Across the Continent: The Story of the Exploring Expedition of Lewis and Clark in 1804-5-6"},{"id":"g12360","title":"The Top of the World"},{"id":"g12361","title":"The Mother's Recompense, Volume 1: A Sequel to Home Influence"},{"id":"g12362","title":"The Mother's Recompense, Volume 2: A Sequel to Home Influence"},{"id":"g12363","title":"The Botanist's Companion, Volume II: Or an Introduction to the Knowledge of Practical Botany, and the Uses of Plants. Either Growing Wild in Great Britain, or Cultivated for the Puroses of Agriculture, Medicine, Rural Oeconomy, or the Arts"},{"id":"g12364","title":"The United States in the Light of Prophecy: Or, an Exposition of Rev. 13:11-17"},{"id":"g12365","title":"Femmes Rêvées"},{"id":"g12366","title":"The Cost of Shelter"},{"id":"g12367","title":"Le péché de Monsieur Antoine, Tome 1"},{"id":"g12368","title":"Contigo Pan y Cebolla"},{"id":"g12369","title":"Library of the World's Best Literature, Ancient and Modern — Volume 01"},{"id":"g1237","title":"Father Goriot"},{"id":"g12370","title":"Bagh O Bahar, or Tales of the Four Darweshes"},{"id":"g12371","title":"The Experiences of a Barrister, and Confessions of an Attorney"},{"id":"g12372","title":"The Atlantic Monthly, Volume 01, No. 06, April, 1858: A Magazine of Literature, Art, and Politics"},{"id":"g12373","title":"The Atlantic Monthly, Volume 01, No. 05, March, 1858: A Magazine of Literature, Art, and Politics"},{"id":"g12374","title":"The Atlantic Monthly, Volume 01, No. 07, May, 1858: A Magazine of Literature, Art, and Politics"},{"id":"g12375","title":"Masters of Space: Morse and the Telegraph; Thompson and the Cable; Bell and the Telephone; Marconi and the Wireless Telegraph; Carty and the Wireless Telephone"},{"id":"g12376","title":"Thirty Years in the Itinerancy"},{"id":"g12377","title":"The Court of Boyville"},{"id":"g12378","title":"Punch, or the London Charivari, Volume 99, August 30, 1890"},{"id":"g12379","title":"Ylösnousemus I"},{"id":"g1238","title":"The City of Dreadful Night"}
... (66870 bytes in full, cut for the report)
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": "g12340"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "1.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 3,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "2.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 4,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "3.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": "g13087"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
... 42 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"items":[{"id":"g13088","title":"Emerson and Other Essays"},{"id":"g13089","title":"The Making of Arguments"},{"id":"g1309","title":"The Spirit of Place, and Other Essays"},{"id":"g13090","title":"The Mirror of Literature, Amusement, and Instruction. Volume 17, No. 494, June 18, 1831"},{"id":"g13091","title":"Hillsboro People"},{"id":"g13092","title":"As Farpas: Chronica Mensal da Politica, das Letras e dos Costumes (1878-01)"},{"id":"g13093","title":"As Farpas: Chronica Mensal da Politica, das Letras e dos Costumes (1878-02/05)"},{"id":"g13094","title":"Heart of the West [Annotated]"},{"id":"g13095","title":"Journal of a Voyage across the Atlantic: With Notes on Canada & the United States, and Return to Great Britain in 1844"},{"id":"g13096","title":"Le Héros de Châteauguay"},{"id":"g13097","title":"Lives of the Most Remarkable Criminals Who have been Condemned and Executed for Murder, the Highway, Housebreaking, Street Robberies, Coining or other offences"},{"id":"g13098","title":"Punch, or the London Charivari, Volume 100, February 28, 1891"},{"id":"g13099","title":"Runoja"},{"id":"g131","title":"The Pilgrim's Progress from this world to that which is to come: Delivered under the similitude of a dream, by John Bunyan"},{"id":"g1310","title":"The Annals of the Parish: Or, the Chronicle of Dalmailing During the Ministry of the Rev. Micah Balwhidder"},{"id":"g13100","title":"Samlade arbeten I"},{"id":"g13101","title":"Samlade arbeten II"},{"id":"g13102","title":"The Decameron, Volume II"},{"id":"g13103","title":"Great Britain and Her Queen"},{"id":"g13104","title":"The Abominations of Modern Society"},{"id":"g13105","title":"Memoirs of Margaret Fuller Ossoli, Volume I"},{"id":"g13106","title":"Memoirs of Margaret Fuller Ossoli, Volume II"},{"id":"g13107","title":"The New South: A Chronicle of Social and Industrial Evolution"},{"id":"g13108","title":"The Mirror of Literature, Amusement, and Instruction. Volume 17, No. 492, June 4, 1831"},{"id":"g13109","title":"About Ireland"},{"id":"g1311","title":"If: A Play in Four Acts"},{"id":"g13110","title":"Aunt Jane's Nieces at Work"},{"id":"g13111","title":"The Brain and the Voice in Speech and Song"},{"id":"g13112","title":"Speeches from the Dock; Or, Protests of Irish Patriotism. Part I: Speeches delivered after conviction by Theobald Wolfe Tone, William Orr, the brothers Sheares, Robert Emmet, John Martin, William Smith O'Brien, Thomas Francis Meagher, Terence Bellew McManus, John Mitchel, Thomas C. Luby, John O'Leary, Charles J. Kickham, Colonel Thomas F. Burke, and Captain Mackay"},{"id":"g13113","title":"The Mirror of Literature, Amusement, and Instruction. Volume 17, No. 495, June 25, 1831"},{"id":"g13114","title":"The Collectors: Being Cases mostly under the Ninth and Tenth Commandments"},{"id":"g13115","title":"Anahuac : or, Mexico and the Mexicans, Ancient and Modern"},{"id":"g13116","title":"Lippincott's Magazine of Popular Literature and Science, Volume 17, No. 097, January, 1876"},{"id":"g13117","title":"The Nests and Eggs of Indian Birds, Volume 1"},{"id":"g13118","title":"Profiles from China: Sketches in Free Verse of People and Things Seen in the Interior"},{"id":"g13119","title":"Jean François Millet: A Collection of Fifteen Pictures and a Portrait of the Painter, with Introduction and Interpretation"},{"id":"g1312","title":"Selected Stories of Bret Harte"},{"id":"g13120","title":"The Philippine Islands, 1493-1898 — Volume 06 of 55: 1583-1588: Explorations by Early Navigators, Descriptions of the Islands and Their Peoples, Their History and Records of the Catholic Missions, as Related in Contemporaneous Books and Manuscripts, Showing the Political, Economic, Commercial and Religious Conditions of Those Islands from Their Earliest Relations with European Nations to the Close of the Nineteenth Century"},{"id":"g13121","title":"A Voyage to Terra Australis — Volume 2: Undertaken for the purpose of completing the discovery of that vast country, and prosecuted in the years 1801, 1802 and 1803, in His Majesty's ship the Investigator, and subsequently in
... (64789 bytes in full, cut for the report)
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": "g13087"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "1.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 3,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "2.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 4,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "3.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": "g1381"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
... 42 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"items":[{"id":"g13810","title":"Tristan"},{"id":"g13811","title":"Peter Stuyvesant, the Last Dutch Governor of New Amsterdam"},{"id":"g13812","title":"Sir Mortimer: A Novel"},{"id":"g13813","title":"The Common Law"},{"id":"g13814","title":"The Development of the Feeling for Nature in the Middle Ages and Modern Times"},{"id":"g13815","title":"The Talking Beasts: A Book of Fable Wisdom"},{"id":"g13816","title":"The Jericho Road"},{"id":"g13817","title":"With Marlborough to Malplaquet"},{"id":"g13818","title":"Jacques"},{"id":"g13819","title":"Les compagnons de Jéhu"},{"id":"g1382","title":"Poems — Volume 2"},{"id":"g13820","title":"Unhappy Far-Off Things"},{"id":"g13821","title":"Tales of Wonder"},{"id":"g13822","title":"Notes and Queries, Number 26, April 27, 1850"},{"id":"g13823","title":"Lady Merton, Colonist"},{"id":"g13824","title":"The National Preacher, Vol. 2 No. 7 Dec. 1827: Or Original Monthly Sermons from Living Ministers, Sermons XXVI. and: XXVII."},{"id":"g13825","title":"Sapho"},{"id":"g13826","title":"A Gunner Aboard the \"Yankee\": From the Diary of Number Five of the After Port Gun (Russell Doubleday): The Yarn of the Cruise and Fights of the Naval Reserves in the Spanish-American War"},{"id":"g13827","title":"Fields of Victory"},{"id":"g13828","title":"Lippincott's Magazine of Popular Literature and Science, Volume 12, No. 29, August, 1873"},{"id":"g13829","title":"The Mirror of Literature, Amusement, and Instruction. Volume 17, No. 475, February 5, 1831"},{"id":"g1383","title":"Poems — Volume 3"},{"id":"g13830","title":"The Wreck of the Hesperus"},{"id":"g13831","title":"Evolution Of The Japanese, Social And Psychic"},{"id":"g13832","title":"Romance of California Life: Illustrated by Pacific Slope Stories, Thrilling, Pathetic and Humorous"},{"id":"g13833","title":"Blackfeet Indian Stories"},{"id":"g13834","title":"À se tordre: Histoires chatnoiresques"},{"id":"g13835","title":"The Amulet"},{"id":"g13836","title":"Wide Courses"},{"id":"g13837","title":"Correspondance, 1812-1876 — Tome 2"},{"id":"g13838","title":"Correspondance, 1812-1876 — Tome 3"},{"id":"g13839","title":"Correspondance, 1812-1876 — Tome 5"},{"id":"g1384","title":"The Ayrshire Legatees; Or, The Pringle Family"},{"id":"g13840","title":"The Sign of the Red Cross: A Tale of Old London"},{"id":"g13841","title":"Oberheim (Voices): A Chronicle of War"},{"id":"g13842","title":"The Story of Manhattan"},{"id":"g13843","title":"Libretto: La Bohème"},{"id":"g13844","title":"No. 13 Washington Square"},{"id":"g13845","title":"Manasse Jäppinen"},{"id":"g13846","title":"Discours de la méthode"},{"id":"g13847","title":"Slave Narratives: A Folk History of Slavery in the United States from Interviews with Former Slaves. Administrative Files: Selected Records Bearing on the History of the Slave Narratives"},{"id":"g13848","title":"Les diaboliques"},{"id":"g13849","title":"Panu: Näytelmä"},{"id":"g1385","title":"Lin McLean"},{"id":"g13850","title":"Panu"},{"id":"g13851","title":"The Downfall"},{"id":"g13852","title":"Literary Taste: How to Form It: With Detailed Instructions for Collecting a Complete Library of English Literature"},{"id":"g13853","title":"New National First Reader"},{"id":"g13854","title":"The Old Franciscan Missions Of California"},{"id":"g13855","title":"Une politique européenne : la France, la Russie, l'Allemagne et la guerre au Transvaal"},{"id":"g13856","title":"La reine Margot - Tome I"},{"id":"g13857","title":"La reine Margot - Tome II"},{"id":"g13858","title":"The Laws of War, Affecting Commerce and Shipping"},{"id":"g13859","title":"Boy Scouts in Southern Waters; Or, Spaniard's Treasure Chest"},{"id":"g1386","title":"Lady Baltimore"},{"id":"g13860","title":"Men of the Bible; Some Lesser-Known Characters"},{"id":"g13861","title":"Adolphe"},{"id":"g13862","title":"Le neveu de Rameau"},{"id":"g13863","title":"Regrets sur ma vieille robe de chambre: Ou, avis à ceux qui ont plus de goût que de fortune"},{"id":"g13864","title":"The Bay State Monthly — Volume 2, No. 3, December, 1884"},{"id":"g13865","title":"Chambers's Ed
... (59790 bytes in full, cut for the report)
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": "g1381"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "1.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 3,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "2.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    },
    {
      "id": 4,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": {
            "$ref": "3.cursor"
          }
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200,
          "after": "g1453"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"items":[{"id":"g14530","title":"Lippincott's Magazine, August, 1885"},{"id":"g14531","title":"The Singing Man: A Book of Songs and Shadows"},{"id":"g14532","title":"The Honorable Peter Stirling and What People Thought of Him"},{"id":"g14533","title":"Hocken and Hunken: A Tale of Troy"},{"id":"g14534","title":"Christmas with Grandma Elsie"},{"id":"g14535","title":"A Christmas Sermon"},{"id":"g14536","title":"Jeanne la Fileuse: Épisode de l'Émigration Franco-Canadienne aux États-Unis"},{"id":"g14537","title":"Un amour vrai"},{"id":"g14538","title":"L'Illustration, No. 3727, 1er Août 1914"},{"id":"g14539","title":"La Chèvre Jaune"},{"id":"g1454","title":"Maitre Cornelius"},{"id":"g14540","title":"When William Came"},{"id":"g14541","title":"Séance De L'académie Française Du 2 Mai 1901: Discours De Réception De M. Berthelot; Réponse De M. Jules Lemaître"},{"id":"g14542","title":"The Lonesome Trail and Other Stories"},{"id":"g14543","title":"False Friends, and The Sailor's Resolve"},{"id":"g14544","title":"Punch, or the London Charivari, Volume 102, April 30, 1892"},{"id":"g14545","title":"Copper Streak Trail"},{"id":"g14546","title":"Betty Gordon at Mountain Camp; Or, The Mystery of Ida Bellethorne"},{"id":"g14547","title":"Gwaith Mynyddog. Cyfrol II"},{"id":"g14548","title":"The Laws of Candy: Beaumont & Fletcher's Works (3 of 10)"},{"id":"g14549","title":"Rule a Wife, and Have a Wife: Beaumont & Fletcher's Works (3 of 10)"},{"id":"g1455","title":"The Hated Son"},{"id":"g14550","title":"Two Hundred Sketches Humorous and Grotesque"},{"id":"g14551","title":"A catechism of Christian doctrine, no. 1"},{"id":"g14552","title":"A catechism of Christian doctrine, no. 2 : for confirmation classes"},{"id":"g14553","title":"A catechism of Christian doctrine, no. 3 : for two years' course for post-confirmation classes"},{"id":"g14554","title":"An explanation of the Baltimore catechism of Christian doctrine"},{"id":"g14555","title":"William Lloyd Garrison, the Abolitionist"},{"id":"g14556","title":"An Encounter in Atlanta"},{"id":"g14557","title":"The Conundrums of Psychology"},{"id":"g14558","title":"Darwinism (1889): An exposition of the theory of natural selection, with some of its applications"},{"id":"g14559","title":"Omzwervingen door de eilandenwereld van den Grooten-oceaan: De Aarde en haar Volken, 1887"},{"id":"g1456","title":"An Episode under the Terror"},{"id":"g14560","title":"Omzwervingen door de eilandenwereld van den Grooten Oceaan: De Fidji-eilanden: De Aarde en haar Volken, 1888"},{"id":"g14561","title":"Reis naar de Fidsji-eilanden: De Aarde en haar Volken, 1892"},{"id":"g14562","title":"The Land-War in Ireland: A History for the Times"},{"id":"g14563","title":"Sheila of Big Wreck Cove: A Story of Cape Cod"},{"id":"g14564","title":"Césarine Dietrich"},{"id":"g14565","title":"Cosmos: A Sketch of the Physical Description of the Universe, Vol. 1"},{"id":"g14566","title":"Elsie's Motherhood"},{"id":"g14567","title":"The Reconstructed School"},{"id":"g14568","title":"Sir Gawayne and the Green Knight: An Alliterative Romance-Poem (c. 1360 A.D.)"},{"id":"g14569","title":"Lapsuuteni muistoja"},{"id":"g1457","title":"Mistress Wilding"},{"id":"g14570","title":"Oulua soutamassa"},{"id":"g14571","title":"Life and Gabriella: The Story of a Woman's Courage"},{"id":"g14572","title":"The Spirit of Christmas"},{"id":"g14573","title":"The Truce of God"},{"id":"g14574","title":"Gunsight Pass: How Oil Came to the Cattle Country and Brought a New West"},{"id":"g14575","title":"Bylow Hill"},{"id":"g14576","title":"Modern Mythology"},{"id":"g14577","title":"The Teaching of History"},{"id":"g14578","title":"From Death Into Life or, Twenty Years of My Ministry"},{"id":"g14579","title":"Simon Called Peter"},{"id":"g1458","title":"Dream Life and Real Life: A Little African Story"},{"id":"g14580","title":"Elsje"},{"id":"g14581","title":"The Just and the Unjust"},{"id":"g14582","title":"The War With the United States : A Chronicle of 1812"},{"id":"g14583","title":"The Continental Monthly, Vol. 1, No. 3, March, 1862"},{"id":"g14584"
... (15301 bytes in full, cut for the report)
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 219 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"page":{"first":200}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":2,"op":"books","args":{"page":{"first":200,"after":{"$ref":"1.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":3,"op":"books","args":{"page":{"first":200,"after":{"$ref":"2.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":4,"op":"books","args":{"page":{"first":200,"after":{"$ref":"3.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 50889 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"b1","title":"The Dispossessed"},{"id":"b2","title":"Invisible Cities"},{"id":"b3","title":"Kindred"},{"id":"b4","title":"A Wizard of Earthsea"},{"id":"g1","title":"The Declaration of Independence of the United States of America"},{"id":"g10","title":"The King James Version of the Bible"},{"id":"g100","title":"The Complete Works of William Shakespeare"},{"id":"g1000","title":"La Divina Commedia di Dante: Complete"},{"id":"g10000","title":"The Magna Carta"},{"id":"g10001","title":"Apocolocyntosis"},{"id":"g10002","title":"The House on the Borderland"},{"id":"g10003","title":"My First Years as a Frenchwoman, 1876-1879"},{"id":"g10004","title":"The Warriors"},{"id":"g10005","title":"A Voyage to the Moon: With Some Account of the Manners and Customs, Science and Philosophy, of the People of Morosofia, and Other Lunarians"},{"id":"g10006","title":"La Fiammetta"},{"id":"g10007","title":"Carmilla"},{"id":"g10008","title":"The Mystery"},{"id":"g10009","title":"Wild Northern Scenes; Or, Sporting Adventures with the Rifle and the Rod"},{"id":"g1001","title":"Divine Comedy, Longfellow's Translation, Hell"},{"id":"g10010","title":"The Eulogies of Howard: A Vision"},{"id":"g10011","title":"365 Foreign Dishes: A Foreign Dish for Every Day in the Year"},{"id":"g10012","title":"The Mountains of California"},{"id":"g10013","title":"Punchinello, Volume 1, No. 09, May 28, 1870"},{"id":"g10014","title":"Punchinello, Volume 1, No. 18, July 30, 1870"},{"id":"g10015","title":"Punchinello, Volume 1, No. 19, August 6, 1870"},{"id":"g10016","title":"Punchinello, Volume 1, No. 21, August 20, 1870"},{"id":"g10017","title":"Punchinello, Volume 1, No. 23, September 3, 1870"},{"id":"g10018","title":"Punchinello, Volume 1, No. 05, April 30, 1870"},{"id":"g10019","title":"Punchinello, Volume 1, No. 22, August 27, 1870"},{"id":"g1002","title":"Divine Comedy, Longfellow's Translation, Purgatory"},{"id":"g10020","title":"The Strand Magazine: Vol. 07, Issue 37, January, 1894.: An Illustrated Monthly"},{"id":"g10021","title":"Tenterhooks"},{"id":"g10022","title":"White Queen of the Cannibals: the Story of Mary Slessor of Calabar"},{"id":"g10023","title":"There's Pippins and Cheese to Come"},{"id":"g10024","title":"Beneath the Banner: Being Narratives of Noble Lives and Brave Deeds"},{"id":"g10025","title":"Gaslight Sonatas"},{"id":"g10026","title":"The Mirror of Literature, Amusement, and Instruction. Volume 10, No. 268, August 11, 1827"},{"id":"g10027","title":"The Triple Alliance, Its Trials and Triumphs"},{"id":"g10028","title":"Spalding's Official Baseball Guide - 1913"},{"id":"g10029","title":"The Hunt Ball Mystery"},{"id":"g1003","title":"Divine Comedy, Longfellow's Translation, Paradise"},{"id":"g10030","title":"The Life of Hon. William F. Cody, Known as Buffalo Bill, the Famous Hunter, Scout and Guide: An Autobiography"},{"id":"g10031","title":"The Complete Poetical Works of Edgar Allan Poe: Including Essays on Poetry"},{"id":"g10032","title":"Punchinello, Volume 1, No. 24, September 10, 1870"},{"id":"g10033","title":"Punchinello, Volume 1, No. 25, September 17, 1870"},{"id":"g10034","title":"Punchinello, Volume 1, No. 26, September 24, 1870"},{"id":"g10035","title":"Punchinello, Volume 2, No. 27, October 1, 1870"},{"id":"g10036","title":"Punchinello, Volume 2, No. 28, October 8, 1870"},{"id":"g10037","title":"A Beautiful Possibility"},{"id":"g10038","title":"The Magnetic North"},{"id":"g10039","title":"The Works of Aphra Behn, Volume III"},{"id":"g1004","title":"Divine Comedy, Longfellow's Translation, Complete"},{"id":"g10040","title":"Aleutian Indian and English Dictionary: Common Words in the Dialects of the Aleutian Indian Language as Spoken by the Oogashik, Egashik, Anangashuk and Misremie Tribes Around Sulima River and Neighboring Parts of the Alaska Peninsula"},{"id":"g10041","title":"The Rivet in Grandfather's Neck: A Comedy of Limitations"},{"id":"g10042","title":"The child under eight"},{"id":"g10043","title":"Klondyke Nuggets: A Brief Description of the Great Gold 
... (60761 bytes in full, cut for the report)
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 228 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"page":{"first":200,"after":"g10871"}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":2,"op":"books","args":{"page":{"first":200,"after":{"$ref":"1.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":3,"op":"books","args":{"page":{"first":200,"after":{"$ref":"2.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":4,"op":"books","args":{"page":{"first":200,"after":{"$ref":"3.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 52730 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g10872","title":"At Sunwich Port, Part 2.: Contents: Chapters 6-10"},{"id":"g10873","title":"At Sunwich Port, Part 3.: Contents: Chapters 11-15"},{"id":"g10874","title":"At Sunwich Port, Part 4.: Contents: Chapters 16-20"},{"id":"g10875","title":"At Sunwich Port, Part 5.: Contents: Chapters 21-25"},{"id":"g10876","title":"At Sunwich Port [complete]"},{"id":"g10877","title":"The Tragedies of the Medici"},{"id":"g10878","title":"The Mule: A Treatise on the Breeding, Training, and Uses to Which He May Be Put"},{"id":"g10879","title":"A Compilation of the Messages and Papers of the Presidents. Volume 2, part 2: John Quincy Adams"},{"id":"g1088","title":"Rolf in the Woods"},{"id":"g10880","title":"Teddy's Button"},{"id":"g10881","title":"Crescent and Iron Cross"},{"id":"g10882","title":"The Eagle's Shadow"},{"id":"g10883","title":"Dio's Rome, Volume 4: An Historical Narrative Originally Composed in Greek During the Reigns of Septimius Severus, Geta and Caracalla, Macrinus, Elagabalus and Alexander Severus: and Now Presented in English Form"},{"id":"g10884","title":"A Publisher and His Friends: Memoir and Correspondence of John Murray; with an Account of the Origin and Progress of the House, 1768-1843"},{"id":"g10885","title":"Stories from the Italian Poets: with Lives of the Writers, Volume 1"},{"id":"g10886","title":"The Untamed"},{"id":"g10887","title":"Babylonian and Assyrian Literature"},{"id":"g10888","title":"Arthur Hamilton, and His Dog"},{"id":"g10889","title":"The Life and Romances of Mrs. Eliza Haywood"},{"id":"g1089","title":"Moon-Face, and Other Stories"},{"id":"g10890","title":"Dio's Rome, Volume 5: An Historical Narrative Originally Composed in Greek During The Reigns of Septimius Severus, Geta and Caracalla, Macrinus, Elagabalus and Alexander Severus: and Now Presented in English Form"},{"id":"g10891","title":"Algonquin Indian Tales"},{"id":"g10892","title":"Dawn"},{"id":"g10893","title":"A Compilation of the Messages and Papers of the Presidents. Volume 1, part 3: Thomas Jefferson"},{"id":"g10894","title":"A Compilation of the Messages and Papers of the Presidents. Volume 1, part 2: John Adams"},{"id":"g10895","title":"A Compilation of the Messages and Papers of the Presidents. Volume 1, part 4: James Madison"},{"id":"g10896","title":"The Mirror of Literature, Amusement, and Instruction. Volume 10, No. 283, November 17, 1827"},{"id":"g10897","title":"The Wendigo"},{"id":"g10898","title":"American Scenes, and Christian Slavery: A Recent Tour of Four Thousand Miles in the United States"},{"id":"g10899","title":"Olivia in India"},{"id":"g109","title":"Renascence, and Other Poems"},{"id":"g1090","title":"The Bickerstaff-Partridge Papers"},{"id":"g10900","title":"The King James Bible"},{"id":"g10901","title":"Three Young Knights"},{"id":"g10902","title":"Big and Little Sisters: A Story of an Indian Mission School"},{"id":"g10903","title":"Punch, or the London Charivari, Volume 153, October 17, 1917"},{"id":"g10904","title":"Frank Merriwell's Nobility; Or, The Tragedy of the Ocean Tramp"},{"id":"g10905","title":"Phantom Fortune, a Novel"},{"id":"g10906","title":"Quinze Jours en Égypte"},{"id":"g10907","title":"The History of Rome, Books 09 to 26"},{"id":"g10908","title":"Manual for Noncommissioned Officers and Privates of Infantry of the Army of the United States, 1917: To be used by Engineer companies (dismounted) and Coast Artillery companies for Infantry instruction and training"},{"id":"g10909","title":"Los Amantes de Teruel: Drama en cuatro actos en verso y prosa"},{"id":"g1091","title":"On Heroes, Hero-Worship, and the Heroic in History"},{"id":"g10910","title":"Robert Louis Stevenson, an Elegy; and Other Poems"},{"id":"g10911","title":"Buried Alive: A Tale of These Days"},{"id":"g10912","title":"The Infant's Delight: Poetry"},{"id":"g10913","title":"English Poems"},{"id":"g10914","title":"Die Brüder Wright: Eine Studie ueber die Entwicklung der Flugmaschine von Lilienthal bis Wright"},{"id":"g10915","title":"The Girl's Cabinet of Inst
... (62596 bytes in full, cut for the report)
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 228 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"page":{"first":200,"after":"g11595"}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":2,"op":"books","args":{"page":{"first":200,"after":{"$ref":"1.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":3,"op":"books","args":{"page":{"first":200,"after":{"$ref":"2.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":4,"op":"books","args":{"page":{"first":200,"after":{"$ref":"3.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 52524 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g11596","title":"La Maison Tellier"},{"id":"g11597","title":"Mlle Fifi: Nouveaux Contes"},{"id":"g11598","title":"La Montaña"},{"id":"g11599","title":"Withered Leaves from Memory's Garland"},{"id":"g1160","title":"The Game"},{"id":"g11600","title":"The Life of Marie de Medicis, Queen of France, Consort of Henri IV, and Regent of the Kingdom under Louis XIII — Volume 2"},{"id":"g11601","title":"The Life of Marie de Medicis, Queen of France, Consort of Henri IV, and Regent of the Kingdom under Louis XIII — Volume 3"},{"id":"g11602","title":"The World of Ice"},{"id":"g11603","title":"The House of Cobwebs and Other Stories"},{"id":"g11604","title":"The Atlantic Monthly, Volume 06, No. 33, July, 1860: A Magazine Of Literature, Art, And Politics"},{"id":"g11605","title":"The Appetite of Tyranny: Including Letters to an Old Garibaldian"},{"id":"g11606","title":"The Atlantic Monthly, Volume 03, No. 16, February, 1859: A Magazine of Literature, Art, and Politics"},{"id":"g11607","title":"Dio's Rome, Volume 2: An Historical Narrative Originally Composed in Greek During the Reigns of Septimius Severus, Geta and Caracalla, Macrinus, Elagabalus and Alexander Severus: and Now Presented in English Form"},{"id":"g11608","title":"From a Girl's Point of View"},{"id":"g11609","title":"The Golden Canyon"},{"id":"g1161","title":"Jerry of the Islands"},{"id":"g11610","title":"Madam Crowl's Ghost and the Dead Sexton"},{"id":"g11611","title":"The Mirror of Literature, Amusement, and Instruction. Volume 13, No. 374, June 6, 1829"},{"id":"g11612","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 550, June 2, 1832"},{"id":"g11613","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 551, June 9, 1832"},{"id":"g11614","title":"The Second Generation"},{"id":"g11615","title":"The Grammar of English Grammars"},{"id":"g11616","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 552, June 16, 1832"},{"id":"g11617","title":"Punch, or the London Charivari, Volume 156, April 2, 1919"},{"id":"g11618","title":"From Chaucer to Tennyson: With Twenty-Nine Portraits and Selections from Thirty Authors"},{"id":"g11619","title":"Punch, or the London Charivari, Volume 153, November 21, 1917"},{"id":"g1162","title":"The Jacket (The Star-Rover)"},{"id":"g11620","title":"My Brilliant Career"},{"id":"g11621","title":"Le Mauvais Génie"},{"id":"g11622","title":"Plus fort que Sherlock Holmès"},{"id":"g11623","title":"The Dramatic Works of John Dryden, Volume 1: With a Life of the Author"},{"id":"g11624","title":"The Reflections of Ambrosine: A Novel"},{"id":"g11625","title":"The Wrong Twin"},{"id":"g11626","title":"The Dawn of All"},{"id":"g11627","title":"The World's Great Sermons, Volume 02: Hooker to South"},{"id":"g11628","title":"Gossip in a Library"},{"id":"g11629","title":"Punch, or the London Charivari, Volume 153, December 26, 1917"},{"id":"g1163","title":"Adventure"},{"id":"g11630","title":"Punch, or the London Charivari, Volume 156, June 18, 1919"},{"id":"g11631","title":"The Mirror of Literature, Amusement, and Instruction. Volume 19, No. 553, June 23, 1832"},{"id":"g11632","title":"Woman: Man's Equal"},{"id":"g11633","title":"Parsifal: A Mystical Drama by Richard Wagner Retold in the Spirit of the Bayreuth Interpretation"},{"id":"g11634","title":"Human Nature in Politics: Third Edition"},{"id":"g11635","title":"Green Tea; Mr. Justice Harbottle"},{"id":"g11636","title":"Notes and Queries, Number 05, December 1, 1849"},{"id":"g11637","title":"The Mirror of Literature, Amusement, and Instruction. Volume 20, No. 558, July 21, 1832"},{"id":"g11638","title":"Punch, or the London Charivari, Volume 153, July 18, 1917"},{"id":"g11639","title":"Figures of Earth: A Comedy of Appearances"},{"id":"g1164","title":"The iron heel"},{"id":"g11640","title":"Love and Mr. Lewisham"},{"id":"g11641","title":"Over There: War Scenes on the Western Front"},{"id":"g11642","title":"What to See in England: A Guide to Places of Historic 
... (62360 bytes in full, cut for the report)
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 228 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"page":{"first":200,"after":"g12340"}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":2,"op":"books","args":{"page":{"first":200,"after":{"$ref":"1.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":3,"op":"books","args":{"page":{"first":200,"after":{"$ref":"2.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":4,"op":"books","args":{"page":{"first":200,"after":{"$ref":"3.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 57057 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g12341","title":"Against the Grain"},{"id":"g12342","title":"The Nuttall encyclopædia"},{"id":"g12343","title":"The Art of Iugling or Legerdemaine: Wherein is Deciphered All the Conueyances of Legerdemaine and Iugling, How They Are Effected, and Wherin They Chiefly Consist; Cautions to Beware of Cheating at Cardes and Dice, the Detection of the Beggerly Art of Alcumistry, and the Foppery of Foolish Cousoning Charmes, All Tending to Mirth and Recreation, Especially for Those That Desire to Haue the Insight and Priuate Practise Thereof"},{"id":"g12344","title":"Sir Robert Hart"},{"id":"g12345","title":"Friday, the Thirteenth: A Novel"},{"id":"g12346","title":"A Roman Singer"},{"id":"g12347","title":"The Morgesons: A Novel"},{"id":"g12348","title":"Richard Vandermarck: A Novel"},{"id":"g12349","title":"The Secret City"},{"id":"g1235","title":"Captain Fracasse"},{"id":"g12350","title":"The International Jewish Cook Book: 1600 Recipes According to the Jewish Dietary Laws with the Rules for Kashering;: the Favorite Recipes of America, Austria, Germany, Russia, France, Poland, Roumania, Etc., Etc."},{"id":"g12351","title":"The German Classics of the Nineteenth and Twentieth Centuries, Volume 07: Masterpieces of German Literature Translated into English. in Twenty Volumes"},{"id":"g12352","title":"Iola Leroy; Or, Shadows Uplifted"},{"id":"g12353","title":"The Making of Religion"},{"id":"g12354","title":"Pink and White Tyranny: A Society Novel"},{"id":"g12355","title":"The Constitutional Development of Japan 1853-1881: Johns Hopkins University Studies in Historical and Political Science, Ninth Series"},{"id":"g12356","title":"Bref récit et succincte narration de la navigation faite en MDXXXV et MDXXXVI par le capitaine Jacques Cartier aux îles de Canada, Hochelaga, Saguenay et autres"},{"id":"g12357","title":"The Case and the Girl"},{"id":"g12358","title":"Preliminary Announcement & List of Members: Society for Pure English, Tract 01 (1919)"},{"id":"g12359","title":"The Meaning of Infancy"},{"id":"g1236","title":"First Across the Continent: The Story of the Exploring Expedition of Lewis and Clark in 1804-5-6"},{"id":"g12360","title":"The Top of the World"},{"id":"g12361","title":"The Mother's Recompense, Volume 1: A Sequel to Home Influence"},{"id":"g12362","title":"The Mother's Recompense, Volume 2: A Sequel to Home Influence"},{"id":"g12363","title":"The Botanist's Companion, Volume II: Or an Introduction to the Knowledge of Practical Botany, and the Uses of Plants. Either Growing Wild in Great Britain, or Cultivated for the Puroses of Agriculture, Medicine, Rural Oeconomy, or the Arts"},{"id":"g12364","title":"The United States in the Light of Prophecy: Or, an Exposition of Rev. 13:11-17"},{"id":"g12365","title":"Femmes Rêvées"},{"id":"g12366","title":"The Cost of Shelter"},{"id":"g12367","title":"Le péché de Monsieur Antoine, Tome 1"},{"id":"g12368","title":"Contigo Pan y Cebolla"},{"id":"g12369","title":"Library of the World's Best Literature, Ancient and Modern — Volume 01"},{"id":"g1237","title":"Father Goriot"},{"id":"g12370","title":"Bagh O Bahar, or Tales of the Four Darweshes"},{"id":"g12371","title":"The Experiences of a Barrister, and Confessions of an Attorney"},{"id":"g12372","title":"The Atlantic Monthly, Volume 01, No. 06, April, 1858: A Magazine of Literature, Art, and Politics"},{"id":"g12373","title":"The Atlantic Monthly, Volume 01, No. 05, March, 1858: A Magazine of Literature, Art, and Politics"},{"id":"g12374","title":"The Atlantic Monthly, Volume 01, No. 07, May, 1858: A Magazine of Literature, Art, and Politics"},{"id":"g12375","title":"Masters of Space: Morse and the Telegraph; Thompson and the Cable; Bell and the Telephone; Marconi and the Wireless Telegraph; Carty and the Wireless Telephone"},{"id":"g12376","title":"Thirty Years in the Itinerancy"},{"id":"g12377","title":"The Court of Boyville"},{"id":"g12378","title":"Punch, or the London Charivari, Volume 99, August 30, 1890"},{"id":"g12379","title":"Ylösnousemus I"},{"id":"
... (66913 bytes in full, cut for the report)
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 228 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"page":{"first":200,"after":"g13087"}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":2,"op":"books","args":{"page":{"first":200,"after":{"$ref":"1.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":3,"op":"books","args":{"page":{"first":200,"after":{"$ref":"2.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":4,"op":"books","args":{"page":{"first":200,"after":{"$ref":"3.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 54984 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g13088","title":"Emerson and Other Essays"},{"id":"g13089","title":"The Making of Arguments"},{"id":"g1309","title":"The Spirit of Place, and Other Essays"},{"id":"g13090","title":"The Mirror of Literature, Amusement, and Instruction. Volume 17, No. 494, June 18, 1831"},{"id":"g13091","title":"Hillsboro People"},{"id":"g13092","title":"As Farpas: Chronica Mensal da Politica, das Letras e dos Costumes (1878-01)"},{"id":"g13093","title":"As Farpas: Chronica Mensal da Politica, das Letras e dos Costumes (1878-02/05)"},{"id":"g13094","title":"Heart of the West [Annotated]"},{"id":"g13095","title":"Journal of a Voyage across the Atlantic: With Notes on Canada & the United States, and Return to Great Britain in 1844"},{"id":"g13096","title":"Le Héros de Châteauguay"},{"id":"g13097","title":"Lives of the Most Remarkable Criminals Who have been Condemned and Executed for Murder, the Highway, Housebreaking, Street Robberies, Coining or other offences"},{"id":"g13098","title":"Punch, or the London Charivari, Volume 100, February 28, 1891"},{"id":"g13099","title":"Runoja"},{"id":"g131","title":"The Pilgrim's Progress from this world to that which is to come: Delivered under the similitude of a dream, by John Bunyan"},{"id":"g1310","title":"The Annals of the Parish: Or, the Chronicle of Dalmailing During the Ministry of the Rev. Micah Balwhidder"},{"id":"g13100","title":"Samlade arbeten I"},{"id":"g13101","title":"Samlade arbeten II"},{"id":"g13102","title":"The Decameron, Volume II"},{"id":"g13103","title":"Great Britain and Her Queen"},{"id":"g13104","title":"The Abominations of Modern Society"},{"id":"g13105","title":"Memoirs of Margaret Fuller Ossoli, Volume I"},{"id":"g13106","title":"Memoirs of Margaret Fuller Ossoli, Volume II"},{"id":"g13107","title":"The New South: A Chronicle of Social and Industrial Evolution"},{"id":"g13108","title":"The Mirror of Literature, Amusement, and Instruction. Volume 17, No. 492, June 4, 1831"},{"id":"g13109","title":"About Ireland"},{"id":"g1311","title":"If: A Play in Four Acts"},{"id":"g13110","title":"Aunt Jane's Nieces at Work"},{"id":"g13111","title":"The Brain and the Voice in Speech and Song"},{"id":"g13112","title":"Speeches from the Dock; Or, Protests of Irish Patriotism. Part I: Speeches delivered after conviction by Theobald Wolfe Tone, William Orr, the brothers Sheares, Robert Emmet, John Martin, William Smith O'Brien, Thomas Francis Meagher, Terence Bellew McManus, John Mitchel, Thomas C. Luby, John O'Leary, Charles J. Kickham, Colonel Thomas F. Burke, and Captain Mackay"},{"id":"g13113","title":"The Mirror of Literature, Amusement, and Instruction. Volume 17, No. 495, June 25, 1831"},{"id":"g13114","title":"The Collectors: Being Cases mostly under the Ninth and Tenth Commandments"},{"id":"g13115","title":"Anahuac : or, Mexico and the Mexicans, Ancient and Modern"},{"id":"g13116","title":"Lippincott's Magazine of Popular Literature and Science, Volume 17, No. 097, January, 1876"},{"id":"g13117","title":"The Nests and Eggs of Indian Birds, Volume 1"},{"id":"g13118","title":"Profiles from China: Sketches in Free Verse of People and Things Seen in the Interior"},{"id":"g13119","title":"Jean François Millet: A Collection of Fifteen Pictures and a Portrait of the Painter, with Introduction and Interpretation"},{"id":"g1312","title":"Selected Stories of Bret Harte"},{"id":"g13120","title":"The Philippine Islands, 1493-1898 — Volume 06 of 55: 1583-1588: Explorations by Early Navigators, Descriptions of the Islands and Their Peoples, Their History and Records of the Catholic Missions, as Related in Contemporaneous Books and Manuscripts, Showing the Political, Economic, Commercial and Religious Conditions of Those Islands from Their Earliest Relations with European Nations to the Close of the Nineteenth Century"},{"id":"g13121","title":"A Voyage to Terra Australis — Volume 2: Undertaken for the purpose of completing the discovery of that vast country, and prosecuted in the years 1801, 1802 and 1803, in His Majesty'
... (64832 bytes in full, cut for the report)
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 227 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"page":{"first":200,"after":"g1381"}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":2,"op":"books","args":{"page":{"first":200,"after":{"$ref":"1.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":3,"op":"books","args":{"page":{"first":200,"after":{"$ref":"2.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true},{"id":4,"op":"books","args":{"page":{"first":200,"after":{"$ref":"3.cursor"}}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 49998 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g13810","title":"Tristan"},{"id":"g13811","title":"Peter Stuyvesant, the Last Dutch Governor of New Amsterdam"},{"id":"g13812","title":"Sir Mortimer: A Novel"},{"id":"g13813","title":"The Common Law"},{"id":"g13814","title":"The Development of the Feeling for Nature in the Middle Ages and Modern Times"},{"id":"g13815","title":"The Talking Beasts: A Book of Fable Wisdom"},{"id":"g13816","title":"The Jericho Road"},{"id":"g13817","title":"With Marlborough to Malplaquet"},{"id":"g13818","title":"Jacques"},{"id":"g13819","title":"Les compagnons de Jéhu"},{"id":"g1382","title":"Poems — Volume 2"},{"id":"g13820","title":"Unhappy Far-Off Things"},{"id":"g13821","title":"Tales of Wonder"},{"id":"g13822","title":"Notes and Queries, Number 26, April 27, 1850"},{"id":"g13823","title":"Lady Merton, Colonist"},{"id":"g13824","title":"The National Preacher, Vol. 2 No. 7 Dec. 1827: Or Original Monthly Sermons from Living Ministers, Sermons XXVI. and: XXVII."},{"id":"g13825","title":"Sapho"},{"id":"g13826","title":"A Gunner Aboard the \"Yankee\": From the Diary of Number Five of the After Port Gun (Russell Doubleday): The Yarn of the Cruise and Fights of the Naval Reserves in the Spanish-American War"},{"id":"g13827","title":"Fields of Victory"},{"id":"g13828","title":"Lippincott's Magazine of Popular Literature and Science, Volume 12, No. 29, August, 1873"},{"id":"g13829","title":"The Mirror of Literature, Amusement, and Instruction. Volume 17, No. 475, February 5, 1831"},{"id":"g1383","title":"Poems — Volume 3"},{"id":"g13830","title":"The Wreck of the Hesperus"},{"id":"g13831","title":"Evolution Of The Japanese, Social And Psychic"},{"id":"g13832","title":"Romance of California Life: Illustrated by Pacific Slope Stories, Thrilling, Pathetic and Humorous"},{"id":"g13833","title":"Blackfeet Indian Stories"},{"id":"g13834","title":"À se tordre: Histoires chatnoiresques"},{"id":"g13835","title":"The Amulet"},{"id":"g13836","title":"Wide Courses"},{"id":"g13837","title":"Correspondance, 1812-1876 — Tome 2"},{"id":"g13838","title":"Correspondance, 1812-1876 — Tome 3"},{"id":"g13839","title":"Correspondance, 1812-1876 — Tome 5"},{"id":"g1384","title":"The Ayrshire Legatees; Or, The Pringle Family"},{"id":"g13840","title":"The Sign of the Red Cross: A Tale of Old London"},{"id":"g13841","title":"Oberheim (Voices): A Chronicle of War"},{"id":"g13842","title":"The Story of Manhattan"},{"id":"g13843","title":"Libretto: La Bohème"},{"id":"g13844","title":"No. 13 Washington Square"},{"id":"g13845","title":"Manasse Jäppinen"},{"id":"g13846","title":"Discours de la méthode"},{"id":"g13847","title":"Slave Narratives: A Folk History of Slavery in the United States from Interviews with Former Slaves. Administrative Files: Selected Records Bearing on the History of the Slave Narratives"},{"id":"g13848","title":"Les diaboliques"},{"id":"g13849","title":"Panu: Näytelmä"},{"id":"g1385","title":"Lin McLean"},{"id":"g13850","title":"Panu"},{"id":"g13851","title":"The Downfall"},{"id":"g13852","title":"Literary Taste: How to Form It: With Detailed Instructions for Collecting a Complete Library of English Literature"},{"id":"g13853","title":"New National First Reader"},{"id":"g13854","title":"The Old Franciscan Missions Of California"},{"id":"g13855","title":"Une politique européenne : la France, la Russie, l'Allemagne et la guerre au Transvaal"},{"id":"g13856","title":"La reine Margot - Tome I"},{"id":"g13857","title":"La reine Margot - Tome II"},{"id":"g13858","title":"The Laws of War, Affecting Commerce and Shipping"},{"id":"g13859","title":"Boy Scouts in Southern Waters; Or, Spaniard's Treasure Chest"},{"id":"g1386","title":"Lady Baltimore"},{"id":"g13860","title":"Men of the Bible; Some Lesser-Known Characters"},{"id":"g13861","title":"Adolphe"},{"id":"g13862","title":"Le neveu de Rameau"},{"id":"g13863","title":"Regrets sur ma vieille robe de chambre: Ou, avis à ceux qui ont plus de goût que de fortune"},{"id":"g13864","title":"The Bay State Monthly — Volume 2, No. 3, December, 
... (59833 bytes in full, cut for the report)
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 92 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"books","args":{"page":{"first":200,"after":"g1453"}},"shape":"{ items { id title } total hasMore cursor }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 12853 bytes on the wire, shown decoded:
{"id":1,"data":{"items":[{"id":"g14530","title":"Lippincott's Magazine, August, 1885"},{"id":"g14531","title":"The Singing Man: A Book of Songs and Shadows"},{"id":"g14532","title":"The Honorable Peter Stirling and What People Thought of Him"},{"id":"g14533","title":"Hocken and Hunken: A Tale of Troy"},{"id":"g14534","title":"Christmas with Grandma Elsie"},{"id":"g14535","title":"A Christmas Sermon"},{"id":"g14536","title":"Jeanne la Fileuse: Épisode de l'Émigration Franco-Canadienne aux États-Unis"},{"id":"g14537","title":"Un amour vrai"},{"id":"g14538","title":"L'Illustration, No. 3727, 1er Août 1914"},{"id":"g14539","title":"La Chèvre Jaune"},{"id":"g1454","title":"Maitre Cornelius"},{"id":"g14540","title":"When William Came"},{"id":"g14541","title":"Séance De L'académie Française Du 2 Mai 1901: Discours De Réception De M. Berthelot; Réponse De M. Jules Lemaître"},{"id":"g14542","title":"The Lonesome Trail and Other Stories"},{"id":"g14543","title":"False Friends, and The Sailor's Resolve"},{"id":"g14544","title":"Punch, or the London Charivari, Volume 102, April 30, 1892"},{"id":"g14545","title":"Copper Streak Trail"},{"id":"g14546","title":"Betty Gordon at Mountain Camp; Or, The Mystery of Ida Bellethorne"},{"id":"g14547","title":"Gwaith Mynyddog. Cyfrol II"},{"id":"g14548","title":"The Laws of Candy: Beaumont & Fletcher's Works (3 of 10)"},{"id":"g14549","title":"Rule a Wife, and Have a Wife: Beaumont & Fletcher's Works (3 of 10)"},{"id":"g1455","title":"The Hated Son"},{"id":"g14550","title":"Two Hundred Sketches Humorous and Grotesque"},{"id":"g14551","title":"A catechism of Christian doctrine, no. 1"},{"id":"g14552","title":"A catechism of Christian doctrine, no. 2 : for confirmation classes"},{"id":"g14553","title":"A catechism of Christian doctrine, no. 3 : for two years' course for post-confirmation classes"},{"id":"g14554","title":"An explanation of the Baltimore catechism of Christian doctrine"},{"id":"g14555","title":"William Lloyd Garrison, the Abolitionist"},{"id":"g14556","title":"An Encounter in Atlanta"},{"id":"g14557","title":"The Conundrums of Psychology"},{"id":"g14558","title":"Darwinism (1889): An exposition of the theory of natural selection, with some of its applications"},{"id":"g14559","title":"Omzwervingen door de eilandenwereld van den Grooten-oceaan: De Aarde en haar Volken, 1887"},{"id":"g1456","title":"An Episode under the Terror"},{"id":"g14560","title":"Omzwervingen door de eilandenwereld van den Grooten Oceaan: De Fidji-eilanden: De Aarde en haar Volken, 1888"},{"id":"g14561","title":"Reis naar de Fidsji-eilanden: De Aarde en haar Volken, 1892"},{"id":"g14562","title":"The Land-War in Ireland: A History for the Times"},{"id":"g14563","title":"Sheila of Big Wreck Cove: A Story of Cape Cod"},{"id":"g14564","title":"Césarine Dietrich"},{"id":"g14565","title":"Cosmos: A Sketch of the Physical Description of the Universe, Vol. 1"},{"id":"g14566","title":"Elsie's Motherhood"},{"id":"g14567","title":"The Reconstructed School"},{"id":"g14568","title":"Sir Gawayne and the Green Knight: An Alliterative Romance-Poem (c. 1360 A.D.)"},{"id":"g14569","title":"Lapsuuteni muistoja"},{"id":"g1457","title":"Mistress Wilding"},{"id":"g14570","title":"Oulua soutamassa"},{"id":"g14571","title":"Life and Gabriella: The Story of a Woman's Courage"},{"id":"g14572","title":"The Spirit of Christmas"},{"id":"g14573","title":"The Truce of God"},{"id":"g14574","title":"Gunsight Pass: How Oil Came to the Cattle Country and Brought a New West"},{"id":"g14575","title":"Bylow Hill"},{"id":"g14576","title":"Modern Mythology"},{"id":"g14577","title":"The Teaching of History"},{"id":"g14578","title":"From Death Into Life or, Twenty Years of My Ministry"},{"id":"g14579","title":"Simon Called Peter"},{"id":"g1458","title":"Dream Life and Real Life: A Little African Story"},{"id":"g14580","title":"Elsje"},{"id":"g14581","title":"The Just and the Unjust"},{"id":"g14582","title":"The War With the United States : A Chronicle of 1812"},{"id":"g14583","title":"The Continental Monthly,
... (15344 bytes in full, cut for the report)
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title } total hasMore cursor }"
    },
    {
      "id": 2,
      "op": "books",
      "args": {
... 38 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "error": {
    "code": "resource_exhausted",
    "message": "Batch cost 1030 exceeds budget 1000",
    "data": {
      "cost": 1030,
      "budget": 1000
    }
  },
  "fin": true
}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title } total hasMore cursor }"
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title } total hasMore cursor }"
    },
    {
      "id": 3,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title } total hasMore cursor }"
    },
    {
      "id": 4,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title } total hasMore cursor }"
    },
    {
      "id": 5,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title } total hasMore cursor }"
    }
  ]
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 1,
          "after": "g1000a"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [],
    "total": 78090,
    "hasMore": false,
    "cursor": null
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 1,
          "after": "g1471"
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g14710",
        "title": "Uncle Titus and His Visit to the Country"
      }
    ],
    "total": 78090,
    "hasMore": true,
    "cursor": "g14710"
  },
  "fin": true
}
POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 2,
          "offset": 4999
        }
      },
      "shape": "{ items { id title } total hasMore cursor }",
      "compact": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g1471",
        "title": "New Poems"
      },
      {
        "id": "g14710",
        "title": "Uncle Titus and His Visit to the Country"
      }
    ],
    "total": 78090,
    "hasMore": true,
    "cursor": "g14710"
... 3 more lines
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "id": "g1471",
        "title": "New Poems"
      },
      {
        "id": "g14710",
        "title": "Uncle Titus and His Visit to the Country"
      }
    ],
    "total": 78090,
    "hasMore": true,
    "cursor": "g14710"
  },
  "fin": true
}

Spot checks: 21 real books with their authors

Rayfold ahead

Measured: requests and bytes to fetch them (bytes on the wire (request + response), lower is better)

RESTREST: 5,565 bytes on the wire (request + response)5,565GraphQLGraphQL: 3,825 bytes on the wire (request + response)3,825RayfoldRayfold: 2,838 bytes on the wire (request + response)2,838
REST
42 requests: each book, then each of its 21 distinct authors, 5565 B
GraphQL
1 request (21 aliased fields), 3825 B
Rayfold
1 request (a batch of 21 ops), 2838 B

Every 3,900th book of the catalogue, from g1 ("The Declaration of Independence of the United States of America", Thomas Jefferson) to g79439; titles and authors identical to the file on all three. GraphQL and Rayfold both need one request, so bytes decide, as in the rows above. Rayfold is measured as its client sends when it has the schema: compact frames in its binary encoding (RB). The identical ops as JSON took 5182 B, with the identical data

See the real requests and responses (45)

REST 42 requests

GET /books/g1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "431e37e5dc8fe5b3"

{
  "id": "g1",
  "title": "The Declaration of Independence of the United States of America",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga1",
  "ownerId": "gutenberg"
}
GET /books/g4010
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "44c91cbdbcd8d8fe"

{
  "id": "g4010",
  "title": "Marmion: A Tale Of Flodden Field",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga49",
  "ownerId": "gutenberg"
}
40 more requests
GET /books/g7971
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "3fcb8adb22a1e9c0"

{
  "id": "g7971",
  "title": "The fugitive",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga811",
  "ownerId": "gutenberg"
}
GET /books/g12438
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "30c179e1f947d7af"

{
  "id": "g12438",
  "title": "The Mirror of Literature, Amusement, and Instruction. Volume 12, No. 335, October 11, 1828",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga104",
  "ownerId": "gutenberg"
}
GET /books/g16368
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "27fb6d841c6e9ace"

{
  "id": "g16368",
  "title": "The White Ladies of Worcester: A Romance of the Twelfth Century",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga1062",
  "ownerId": "gutenberg"
}
GET /books/g20385
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "a5e7f3df952066de"

{
  "id": "g20385",
  "title": "Some Three Hundred Years Ago",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga6384",
  "ownerId": "gutenberg"
}
GET /books/g24555
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8d979d7f72931c8b"

{
  "id": "g24555",
  "title": "Cri des colons contre un ouvrage de M. l'évêque et sénateur Grégoire, ayant pour titre 'De la Littérature des nègres'",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga7798",
  "ownerId": "gutenberg"
}
GET /books/g28548
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "6156603a7c1032e9"

{
  "id": "g28548",
  "title": "Gipsy Life: Being an account of our Gipsies and their children, with suggestions for their improvement",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga9353",
  "ownerId": "gutenberg"
}
GET /books/g32510
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d62bc78bea893457"

{
  "id": "g32510",
  "title": "The Life of William Ewart Gladstone, Vol. 2 (of 3): 1859-1880",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga2930",
  "ownerId": "gutenberg"
}
GET /books/g36416
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "ff6b4cf3e913f534"

{
  "id": "g36416",
  "title": "Le Cardinal de Richelieu",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga12147",
  "ownerId": "gutenberg"
}
GET /books/g40317
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "25d6cdebf62c3ee2"

{
  "id": "g40317",
  "title": "Hymnen",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga13522",
  "ownerId": "gutenberg"
}
GET /books/g44217
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c608fe7fc8cc1895"

{
  "id": "g44217",
  "title": "Libahunt: Draama wiies vaatuses",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga14852",
  "ownerId": "gutenberg"
}
GET /books/g48117
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "36146e55ea8998b1"

{
  "id": "g48117",
  "title": "The Heir to Grand-Pré",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga16155",
  "ownerId": "gutenberg"
}
GET /books/g52022
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "3097ae59ec50587f"

{
  "id": "g52022",
  "title": "The Cricket Field: Or, the History and Science of the Game of Cricket",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga17457",
  "ownerId": "gutenberg"
}
GET /books/g55925
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "3979ffecba98ebdd"

{
  "id": "g55925",
  "title": "Kant's gesammelte Schriften. Band V. Kritik der Urtheilskraft.",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga1205",
  "ownerId": "gutenberg"
}
GET /books/g59830
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "e2f084eed46a5f7a"

{
  "id": "g59830",
  "title": "History of the Conquest of Mexico; vol. 3/4",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga476",
  "ownerId": "gutenberg"
}
GET /books/g63732
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "6b7c1c3ed2e1cf41"

{
  "id": "g63732",
  "title": "Elina: Murroskauden kertomus",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga3064",
  "ownerId": "gutenberg"
}
GET /books/g67634
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "6aea2ea2252b80be"

{
  "id": "g67634",
  "title": "Report of the Sanitary Committee of the Commissioners of Sewers of the City of London, together with a report of the Medical Officer of Health on the objections raised by the Butchers' Trade Society to the bye-laws proposed for the regulation of slaughter-houses",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga22593",
  "ownerId": "gutenberg"
}
GET /books/g71630
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "ff6a8275715f34f2"

{
  "id": "g71630",
  "title": "The mind of primitive man",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga14151",
  "ownerId": "gutenberg"
}
GET /books/g75531
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "d67d46fd1ff0ade1"

{
  "id": "g75531",
  "title": "Ladies' dress shoes of the nineteenth century",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga25083",
  "ownerId": "gutenberg"
}
GET /books/g79439
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "116ca2d42521bfdf"

{
  "id": "g79439",
  "title": "The slave ship",
  "format": "EBOOK",
  "price": "0.00",
  "stock": 1000000,
  "authorId": "ga604",
  "ownerId": "gutenberg"
}
GET /authors/ga1
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "4d5919e3577aa038"

{
  "id": "ga1",
  "name": "Thomas Jefferson",
  "bio": "Lived 1743-1826."
}
GET /authors/ga49
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "e43c6085de299d43"

{
  "id": "ga49",
  "name": "Walter Scott",
  "bio": "Lived 1771-1832."
}
GET /authors/ga811
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "8e0126ae3a060353"

{
  "id": "ga811",
  "name": "Rabindranath Tagore",
  "bio": "Lived 1861-1941."
}
GET /authors/ga104
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "b6e9e5ca3ebf78bc"

{
  "id": "ga104",
  "name": "Various",
  "bio": null
}
GET /authors/ga1062
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "f39dd886060438e6"

{
  "id": "ga1062",
  "name": "Florence L. Barclay",
  "bio": "Lived 1862-1921."
}
GET /authors/ga6384
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "42968c9a33777d6e"

{
  "id": "ga6384",
  "name": "Edith Gilman Brewster",
  "bio": "Lived 1873-1960."
}
GET /authors/ga7798
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "ca4b2108821038b3"

{
  "id": "ga7798",
  "name": "F.-R. de Tussac",
  "bio": "Lived 1786-1827."
}
GET /authors/ga9353
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "9e26d83f15e4a06a"

{
  "id": "ga9353",
  "name": "George Smith",
  "bio": "Lived 1831-1895."
}
GET /authors/ga2930
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "4228258232a04d05"

{
  "id": "ga2930",
  "name": "John Morley",
  "bio": "Lived 1838-1923."
}
GET /authors/ga12147
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "12fb4ce4b0d21556"

{
  "id": "ga12147",
  "name": "Hyacinthe Corne",
  "bio": "Lived 1802-1887."
}
GET /authors/ga13522
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "2ffb095e15917b0b"

{
  "id": "ga13522",
  "name": "Otokar Brezina",
  "bio": "Lived 1868-1929."
}
GET /authors/ga14852
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "ba27cf0ac519db26"

{
  "id": "ga14852",
  "name": "August Kitzberg",
  "bio": "Lived 1855-1927."
}
GET /authors/ga16155
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "e8b7a1725c3bacfc"

{
  "id": "ga16155",
  "name": "John Frederic Herbin",
  "bio": "Lived 1860-1923."
}
GET /authors/ga17457
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "9b05b80f9280ca47"

{
  "id": "ga17457",
  "name": "James Pycroft",
  "bio": "Lived 1813-1895."
}
GET /authors/ga1205
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "1b003028dbaa41ee"

{
  "id": "ga1205",
  "name": "Immanuel Kant",
  "bio": "Lived 1724-1804."
}
GET /authors/ga476
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "c6d38006b2aec662"

{
  "id": "ga476",
  "name": "William Hickling Prescott",
  "bio": "Lived 1796-1859."
}
GET /authors/ga3064
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "54848a8d7e425a1d"

{
  "id": "ga3064",
  "name": "Eino Leino",
  "bio": "Lived 1878-1926."
}
GET /authors/ga22593
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "3605930d0c30796a"

{
  "id": "ga22593",
  "name": "W. Sedgwick Saunders",
  "bio": "Lived 1824-1901."
}
GET /authors/ga14151
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "f872e7e557467ae1"

{
  "id": "ga14151",
  "name": "Franz Boas",
  "bio": "Lived 1858-1942."
}
GET /authors/ga25083
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "1d94c99cbe05aebc"

{
  "id": "ga25083",
  "name": "T. Watson Greig",
  "bio": "Lived 1837-1912."
}
GET /authors/ga604
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "5df8b641eb3a8900"

{
  "id": "ga604",
  "name": "Mary Johnston",
  "bio": "Lived 1870-1936."
}

GraphQL 1 request

POST /graphql
content-type: application/json

{
  "query": "{ b0: book(id: \"g1\") { id title author { name } } b1: book(id: \"g4010\") { id title author { name } } b2: book(id: \"g7971\") { id title author { name } } b3: book(id: \"g12438\") { id title author { name } } b4: book(id: \"g16368\") { id title author { name } } b5: book(id: \"g20385\") { id title author { name } } b6: book(id: \"g24555\") { id title author { name } } b7: book(id: \"g28548\") { id title author { name } } b8: book(id: \"g32510\") { id title author { name } } b9: book(id: \"g36416\") { id title author { name } } b10: book(id: \"g40317\") { id title author { name } } b11: book(id: \"g44217\") { id title author { name } } b12: book(id: \"g48117\") { id title author { name } } b13: book(id: \"g52022\") { id title author { name } } b14: book(id: \"g55925\") { id title author { name } } b15: book(id: \"g59830\") { id title author { name } } b16: book(id: \"g63732\") { id title author { name } } b17: book(id: \"g67634\") { id title author { name } } b18: book(id: \"g71630\") { id title author { name } } b19: book(id: \"g75531\") { id title author { name } } b20: book(id: \"g79439\") { id title author { name } } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "b0": {
      "id": "g1",
      "title": "The Declaration of Independence of the United States of America",
      "author": {
        "name": "Thomas Jefferson"
      }
    },
    "b1": {
      "id": "g4010",
      "title": "Marmion: A Tale Of Flodden Field",
      "author": {
        "name": "Walter Scott"
      }
    },
... 135 more lines
Full response body
{
  "data": {
    "b0": {
      "id": "g1",
      "title": "The Declaration of Independence of the United States of America",
      "author": {
        "name": "Thomas Jefferson"
      }
    },
    "b1": {
      "id": "g4010",
      "title": "Marmion: A Tale Of Flodden Field",
      "author": {
        "name": "Walter Scott"
      }
    },
    "b2": {
      "id": "g7971",
      "title": "The fugitive",
      "author": {
        "name": "Rabindranath Tagore"
      }
    },
    "b3": {
      "id": "g12438",
      "title": "The Mirror of Literature, Amusement, and Instruction. Volume 12, No. 335, October 11, 1828",
      "author": {
        "name": "Various"
      }
    },
    "b4": {
      "id": "g16368",
      "title": "The White Ladies of Worcester: A Romance of the Twelfth Century",
      "author": {
        "name": "Florence L. Barclay"
      }
    },
    "b5": {
      "id": "g20385",
      "title": "Some Three Hundred Years Ago",
      "author": {
        "name": "Edith Gilman Brewster"
      }
    },
    "b6": {
      "id": "g24555",
      "title": "Cri des colons contre un ouvrage de M. l'évêque et sénateur Grégoire, ayant pour titre 'De la Littérature des nègres'",
      "author": {
        "name": "F.-R. de Tussac"
      }
    },
    "b7": {
      "id": "g28548",
      "title": "Gipsy Life: Being an account of our Gipsies and their children, with suggestions for their improvement",
      "author": {
        "name": "George Smith"
      }
    },
    "b8": {
      "id": "g32510",
      "title": "The Life of William Ewart Gladstone, Vol. 2 (of 3): 1859-1880",
      "author": {
        "name": "John Morley"
      }
    },
    "b9": {
      "id": "g36416",
      "title": "Le Cardinal de Richelieu",
      "author": {
        "name": "Hyacinthe Corne"
      }
    },
    "b10": {
      "id": "g40317",
      "title": "Hymnen",
      "author": {
        "name": "Otokar Brezina"
      }
    },
    "b11": {
      "id": "g44217",
      "title": "Libahunt: Draama wiies vaatuses",
      "author": {
        "name": "August Kitzberg"
      }
    },
    "b12": {
      "id": "g48117",
      "title": "The Heir to Grand-Pré",
      "author": {
        "name": "John Frederic Herbin"
      }
    },
    "b13": {
      "id": "g52022",
      "title": "The Cricket Field: Or, the History and Science of the Game of Cricket",
      "author": {
        "name": "James Pycroft"
      }
    },
    "b14": {
      "id": "g55925",
      "title": "Kant's gesammelte Schriften. Band V. Kritik der Urtheilskraft.",
      "author": {
        "name": "Immanuel Kant"
      }
    },
    "b15": {
      "id": "g59830",
      "title": "History of the Conquest of Mexico; vol. 3/4",
      "author": {
        "name": "William Hickling Prescott"
      }
    },
    "b16": {
      "id": "g63732",
      "title": "Elina: Murroskauden kertomus",
      "author": {
        "name": "Eino Leino"
      }
    },
    "b17": {
      "id": "g67634",
      "title": "Report of the Sanitary Committee of the Commissioners of Sewers of the City of London, together with a report of the Medical Officer of Health on the objections raised by the Butchers' Trade Society to the bye-laws proposed for the regulation of slaughter-houses",
      "author": {
        "name": "W. Sedgwick Saunders"
      }
    },
    "b18": {
      "id": "g71630",
      "title": "The mind of primitive man",
      "author": {
        "name": "Franz Boas"
      }
    },
    "b19": {
      "id": "g75531",
      "title": "Ladies' dress shoes of the nineteenth century",
      "author": {
        "name": "T. Watson Greig"
      }
    },
    "b20": {
      "id": "g79439",
      "title": "The slave ship",
      "author": {
        "name": "Mary Johnston"
      }
    }
  }
}

Rayfold 2 requests

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "g1"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 2,
      "op": "book",
      "args": {
        "id": "g4010"
... 177 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"id":"g1","title":"The Declaration of Independence of the United States of America","author":{"name":"Thomas Jefferson"}},"fin":true}
{"id":2,"data":{"id":"g4010","title":"Marmion: A Tale Of Flodden Field","author":{"name":"Walter Scott"}},"fin":true}
{"id":3,"data":{"id":"g7971","title":"The fugitive","author":{"name":"Rabindranath Tagore"}},"fin":true}
{"id":4,"data":{"id":"g12438","title":"The Mirror of Literature, Amusement, and Instruction. Volume 12, No. 335, October 11, 1828","author":{"name":"Various"}},"fin":true}
{"id":5,"data":{"id":"g16368","title":"The White Ladies of Worcester: A Romance of the Twelfth Century","author":{"name":"Florence L. Barclay"}},"fin":true}
{"id":6,"data":{"id":"g20385","title":"Some Three Hundred Years Ago","author":{"name":"Edith Gilman Brewster"}},"fin":true}
{"id":7,"data":{"id":"g24555","title":"Cri des colons contre un ouvrage de M. l'évêque et sénateur Grégoire, ayant pour titre 'De la Littérature des nègres'","author":{"name":"F.-R. de Tussac"}},"fin":true}
{"id":8,"data":{"id":"g28548","title":"Gipsy Life: Being an account of our Gipsies and their children, with suggestions for their improvement","author":{"name":"George Smith"}},"fin":true}
{"id":9,"data":{"id":"g32510","title":"The Life of William Ewart Gladstone, Vol. 2 (of 3): 1859-1880","author":{"name":"John Morley"}},"fin":true}
{"id":10,"data":{"id":"g36416","title":"Le Cardinal de Richelieu","author":{"name":"Hyacinthe Corne"}},"fin":true}
{"id":11,"data":{"id":"g40317","title":"Hymnen","author":{"name":"Otokar Brezina"}},"fin":true}
{"id":12,"data":{"id":"g44217","title":"Libahunt: Draama wiies vaatuses","author":{"name":"August Kitzberg"}},"fin":true}
{"id":13,"data":{"id":"g48117","title":"The Heir to Grand-Pré","author":{"name":"John Frederic Herbin"}},"fin":true}
{"id":14,"data":{"id":"g52022","title":"The Cricket Field: Or, the History and Science of the Game of Cricket","author":{"name":"James Pycroft"}},"fin":true}
{"id":15,"data":{"id":"g55925","title":"Kant's gesammelte Schriften. Band V. Kritik der Urtheilskraft.","author":{"name":"Immanuel Kant"}},"fin":true}
{"id":16,"data":{"id":"g59830","title":"History of the Conquest of Mexico; vol. 3/4","author":{"name":"William Hickling Prescott"}},"fin":true}
... 5 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "g1"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 2,
      "op": "book",
      "args": {
        "id": "g4010"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 3,
      "op": "book",
      "args": {
        "id": "g7971"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 4,
      "op": "book",
      "args": {
        "id": "g12438"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 5,
      "op": "book",
      "args": {
        "id": "g16368"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 6,
      "op": "book",
      "args": {
        "id": "g20385"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 7,
      "op": "book",
      "args": {
        "id": "g24555"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 8,
      "op": "book",
      "args": {
        "id": "g28548"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 9,
      "op": "book",
      "args": {
        "id": "g32510"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 10,
      "op": "book",
      "args": {
        "id": "g36416"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 11,
      "op": "book",
      "args": {
        "id": "g40317"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 12,
      "op": "book",
      "args": {
        "id": "g44217"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 13,
      "op": "book",
      "args": {
        "id": "g48117"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 14,
      "op": "book",
      "args": {
        "id": "g52022"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 15,
      "op": "book",
      "args": {
        "id": "g55925"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 16,
      "op": "book",
      "args": {
        "id": "g59830"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 17,
      "op": "book",
      "args": {
        "id": "g63732"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 18,
      "op": "book",
      "args": {
        "id": "g67634"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 19,
      "op": "book",
      "args": {
        "id": "g71630"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 20,
      "op": "book",
      "args": {
        "id": "g75531"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    },
    {
      "id": 21,
      "op": "book",
      "args": {
        "id": "g79439"
      },
      "shape": "{ id title author { name } }",
      "compact": true
    }
  ]
}
Full response body
{"id":1,"data":{"id":"g1","title":"The Declaration of Independence of the United States of America","author":{"name":"Thomas Jefferson"}},"fin":true}
{"id":2,"data":{"id":"g4010","title":"Marmion: A Tale Of Flodden Field","author":{"name":"Walter Scott"}},"fin":true}
{"id":3,"data":{"id":"g7971","title":"The fugitive","author":{"name":"Rabindranath Tagore"}},"fin":true}
{"id":4,"data":{"id":"g12438","title":"The Mirror of Literature, Amusement, and Instruction. Volume 12, No. 335, October 11, 1828","author":{"name":"Various"}},"fin":true}
{"id":5,"data":{"id":"g16368","title":"The White Ladies of Worcester: A Romance of the Twelfth Century","author":{"name":"Florence L. Barclay"}},"fin":true}
{"id":6,"data":{"id":"g20385","title":"Some Three Hundred Years Ago","author":{"name":"Edith Gilman Brewster"}},"fin":true}
{"id":7,"data":{"id":"g24555","title":"Cri des colons contre un ouvrage de M. l'évêque et sénateur Grégoire, ayant pour titre 'De la Littérature des nègres'","author":{"name":"F.-R. de Tussac"}},"fin":true}
{"id":8,"data":{"id":"g28548","title":"Gipsy Life: Being an account of our Gipsies and their children, with suggestions for their improvement","author":{"name":"George Smith"}},"fin":true}
{"id":9,"data":{"id":"g32510","title":"The Life of William Ewart Gladstone, Vol. 2 (of 3): 1859-1880","author":{"name":"John Morley"}},"fin":true}
{"id":10,"data":{"id":"g36416","title":"Le Cardinal de Richelieu","author":{"name":"Hyacinthe Corne"}},"fin":true}
{"id":11,"data":{"id":"g40317","title":"Hymnen","author":{"name":"Otokar Brezina"}},"fin":true}
{"id":12,"data":{"id":"g44217","title":"Libahunt: Draama wiies vaatuses","author":{"name":"August Kitzberg"}},"fin":true}
{"id":13,"data":{"id":"g48117","title":"The Heir to Grand-Pré","author":{"name":"John Frederic Herbin"}},"fin":true}
{"id":14,"data":{"id":"g52022","title":"The Cricket Field: Or, the History and Science of the Game of Cricket","author":{"name":"James Pycroft"}},"fin":true}
{"id":15,"data":{"id":"g55925","title":"Kant's gesammelte Schriften. Band V. Kritik der Urtheilskraft.","author":{"name":"Immanuel Kant"}},"fin":true}
{"id":16,"data":{"id":"g59830","title":"History of the Conquest of Mexico; vol. 3/4","author":{"name":"William Hickling Prescott"}},"fin":true}
{"id":17,"data":{"id":"g63732","title":"Elina: Murroskauden kertomus","author":{"name":"Eino Leino"}},"fin":true}
{"id":18,"data":{"id":"g67634","title":"Report of the Sanitary Committee of the Commissioners of Sewers of the City of London, together with a report of the Medical Officer of Health on the objections raised by the Butchers' Trade Society to the bye-laws proposed for the regulation of slaughter-houses","author":{"name":"W. Sedgwick Saunders"}},"fin":true}
{"id":19,"data":{"id":"g71630","title":"The mind of primitive man","author":{"name":"Franz Boas"}},"fin":true}
{"id":20,"data":{"id":"g75531","title":"Ladies' dress shoes of the nineteenth century","author":{"name":"T. Watson Greig"}},"fin":true}
{"id":21,"data":{"id":"g79439","title":"The slave ship","author":{"name":"Mary Johnston"}},"fin":true}
POST /rayfold
accept: application/rayfold
content-type: application/rayfold

RB request, 682 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"book","args":{"id":"g1"},"shape":"{ id title author { name } }","compact":true},{"id":2,"op":"book","args":{"id":"g4010"},"shape":"{ id title author { name } }","compact":true},{"id":3,"op":"book","args":{"id":"g7971"},"shape":"{ id title author { name } }","compact":true},{"id":4,"op":"book","args":{"id":"g12438"},"shape":"{ id title author { name } }","compact":true},{"id":5,"op":"book","args":{"id":"g16368"},"shape":"{ id title author { name } }","compact":true},{"id":6,"op":"book","args":{"id":"g20385"},"shape":"{ id title author { name } }","compact":true},{"id":7,"op":"book","args":{"id":"g24555"},"shape":"{ id title author { name } }","compact":true},{"id":8,"op":"book","args":{"id":"g28548"},"shape":"{ id title author { name } }","compact":true},{"id":9,"op":"book","args":{"id":"g32510"},"shape":"{ id title author { name } }","compact":true},{"id":10,"op":"book","args":{"id":"g36416"},"shape":"{ id title author { name } }","compact":true},{"id":11,"op":"book","args":{"id":"g40317"},"shape":"{ id title author { name } }","compact":true},{"id":12,"op":"book","args":{"id":"g44217"},"shape":"{ id title author { name } }","compact":true},{"id":13,"op":"book","args":{"id":"g48117"},"shape":"{ id title author { name } }","compact":true},{"id":14,"op":"book","args":{"id":"g52022"},"shape":"{ id title author { name } }","compact":true},{"id":15,"op":"book","args":{"id":"g55925"},"shape":"{ id title author { name } }","compact":true},{"id":16,"op":"book","args":{"id":"g59830"},"shape":"{ id title author { name } }","compact":true},{"id":17,"op":"book","args":{"id":"g63732"},"shape":"{ id title author { name } }","compact":true},{"id":18,"op":"book","args":{"id":"g67634"},"shape":"{ id title author { name } }","compact":true},{"id":19,"op":"book","args":{"id":"g71630"},"shape":"{ id title author { name } }","compact":true},{"id":20,"op":"book","args":{"id":"g75531"},"shape":"{ id title author { name } }","compact":true},{"id":21,"op":"book","args":{"id":"g79439"},"shape":"{ id title author { name } }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 2148 bytes on the wire, shown decoded:
{"id":1,"data":{"id":"g1","title":"The Declaration of Independence of the United States of America","author":{"name":"Thomas Jefferson"}},"fin":true}
{"id":2,"data":{"id":"g4010","title":"Marmion: A Tale Of Flodden Field","author":{"name":"Walter Scott"}},"fin":true}
{"id":3,"data":{"id":"g7971","title":"The fugitive","author":{"name":"Rabindranath Tagore"}},"fin":true}
{"id":4,"data":{"id":"g12438","title":"The Mirror of Literature, Amusement, and Instruction. Volume 12, No. 335, October 11, 1828","author":{"name":"Various"}},"fin":true}
{"id":5,"data":{"id":"g16368","title":"The White Ladies of Worcester: A Romance of the Twelfth Century","author":{"name":"Florence L. Barclay"}},"fin":true}
{"id":6,"data":{"id":"g20385","title":"Some Three Hundred Years Ago","author":{"name":"Edith Gilman Brewster"}},"fin":true}
{"id":7,"data":{"id":"g24555","title":"Cri des colons contre un ouvrage de M. l'évêque et sénateur Grégoire, ayant pour titre 'De la Littérature des nègres'","author":{"name":"F.-R. de Tussac"}},"fin":true}
{"id":8,"data":{"id":"g28548","title":"Gipsy Life: Being an account of our Gipsies and their children, with suggestions for their improvement","author":{"name":"George Smith"}},"fin":true}
{"id":9,"data":{"id":"g32510","title":"The Life of William Ewart Gladstone, Vol. 2 (of 3): 1859-1880","author":{"name":"John Morley"}},"fin":true}
{"id":10,"data":{"id":"g36416","title":"Le Cardinal de Richelieu","author":{"name":"Hyacinthe Corne"}},"fin":true}
{"id":11,"data":{"id":"g40317","title":"Hymnen","author":{"name":"Otokar Brezina"}},"fin":true}
{"id":12,"data":{"id":"g44217","title":"Libahunt: Draama wiies vaatuses","author":{"name":"August Kitzberg"}},"fin":true}
{"id":13,"data":{"id":"g48117","title":"The Heir to Grand-Pré","author":{"name":"John Frederic Herbin"}},"fin":true}
{"id":14,"data":{"id":"g52022","title":"The Cricket Field: Or, the History and Science of the Game of Cricket","author":{"name":"James Pycroft"}},"fin":true}
{"id":15,"data":{"id":"g55925","title":"Kant's gesammelte Schriften. Band V. Kritik der Urtheilskraft.","author":{"name":"Immanuel Kant"}},"fin":true}
... 6 more lines
Full response body
RB, 2148 bytes on the wire, shown decoded:
{"id":1,"data":{"id":"g1","title":"The Declaration of Independence of the United States of America","author":{"name":"Thomas Jefferson"}},"fin":true}
{"id":2,"data":{"id":"g4010","title":"Marmion: A Tale Of Flodden Field","author":{"name":"Walter Scott"}},"fin":true}
{"id":3,"data":{"id":"g7971","title":"The fugitive","author":{"name":"Rabindranath Tagore"}},"fin":true}
{"id":4,"data":{"id":"g12438","title":"The Mirror of Literature, Amusement, and Instruction. Volume 12, No. 335, October 11, 1828","author":{"name":"Various"}},"fin":true}
{"id":5,"data":{"id":"g16368","title":"The White Ladies of Worcester: A Romance of the Twelfth Century","author":{"name":"Florence L. Barclay"}},"fin":true}
{"id":6,"data":{"id":"g20385","title":"Some Three Hundred Years Ago","author":{"name":"Edith Gilman Brewster"}},"fin":true}
{"id":7,"data":{"id":"g24555","title":"Cri des colons contre un ouvrage de M. l'évêque et sénateur Grégoire, ayant pour titre 'De la Littérature des nègres'","author":{"name":"F.-R. de Tussac"}},"fin":true}
{"id":8,"data":{"id":"g28548","title":"Gipsy Life: Being an account of our Gipsies and their children, with suggestions for their improvement","author":{"name":"George Smith"}},"fin":true}
{"id":9,"data":{"id":"g32510","title":"The Life of William Ewart Gladstone, Vol. 2 (of 3): 1859-1880","author":{"name":"John Morley"}},"fin":true}
{"id":10,"data":{"id":"g36416","title":"Le Cardinal de Richelieu","author":{"name":"Hyacinthe Corne"}},"fin":true}
{"id":11,"data":{"id":"g40317","title":"Hymnen","author":{"name":"Otokar Brezina"}},"fin":true}
{"id":12,"data":{"id":"g44217","title":"Libahunt: Draama wiies vaatuses","author":{"name":"August Kitzberg"}},"fin":true}
{"id":13,"data":{"id":"g48117","title":"The Heir to Grand-Pré","author":{"name":"John Frederic Herbin"}},"fin":true}
{"id":14,"data":{"id":"g52022","title":"The Cricket Field: Or, the History and Science of the Game of Cricket","author":{"name":"James Pycroft"}},"fin":true}
{"id":15,"data":{"id":"g55925","title":"Kant's gesammelte Schriften. Band V. Kritik der Urtheilskraft.","author":{"name":"Immanuel Kant"}},"fin":true}
{"id":16,"data":{"id":"g59830","title":"History of the Conquest of Mexico; vol. 3/4","author":{"name":"William Hickling Prescott"}},"fin":true}
{"id":17,"data":{"id":"g63732","title":"Elina: Murroskauden kertomus","author":{"name":"Eino Leino"}},"fin":true}
{"id":18,"data":{"id":"g67634","title":"Report of the Sanitary Committee of the Commissioners of Sewers of the City of London, together with a report of the Medical Officer of Health on the objections raised by the Butchers' Trade Society to the bye-laws proposed for the regulation of slaughter-houses","author":{"name":"W. Sedgwick Saunders"}},"fin":true}
{"id":19,"data":{"id":"g71630","title":"The mind of primitive man","author":{"name":"Franz Boas"}},"fin":true}
{"id":20,"data":{"id":"g75531","title":"Ladies' dress shoes of the nineteenth century","author":{"name":"T. Watson Greig"}},"fin":true}
{"id":21,"data":{"id":"g79439","title":"The slave ship","author":{"name":"Mary Johnston"}},"fin":true}

Over-budget batch on real data (3 x 200 books with author names)

Rayfold ahead

Measured: rejected before execution? (rejected before execution (1 = yes), higher is better)

RESTREST: no rejected before execution (1 = yes)noGraphQLGraphQL: no rejected before execution (1 = yes)noRayfoldRayfold: yes rejected before execution (1 = yes)yes
REST
no: 3 requests served 600 rows
GraphQL
no: one query served 600 rows (no cost analysis unless a plugin is added)
Rayfold
yes: static cost 1218 vs budget 1000, refused in the batch's only frame before any resolver ran

One such list costs 406 and is accepted, with the titles too: scalar fields come with the row already loaded, so the budget counts rows and loads, not columns. Three in one batch are refused; REST and GraphQL serve any number

See the real requests and responses (6)

REST 3 requests

GET /books?limit=200
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "89cce95b934076be"

{"items":[{"id":"b1","title":"The Dispossessed","format":"PAPERBACK","price":"12.99","stock":5,"authorId":"a1","ownerId":"u1"},{"id":"b2","title":"Invisible Cities","format":"HARDCOVER","price":"19.50","stock":2,"authorId":"a2","ownerId":"u2"},{"id":"b3","title":"Kindred","format":"EBOOK","price":"8.00","stock":100,"authorId":"a3","ownerId":"u1"},{"id":"b4","title":"A Wizard of Earthsea","format":"PAPERBACK","price":"9.99","stock":0,"authorId":"a1","ownerId":"u1"},{"id":"g1","title":"The Declaration of Independence of the United States of America","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1","ownerId":"gutenberg"},{"id":"g10","title":"The King James Version of the Bible","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga0","ownerId":"gutenberg"},{"id":"g100","title":"The Complete Works of William Shakespeare","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1000","title":"La Divina Commedia di Dante: Complete","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga436","ownerId":"gutenberg"},{"id":"g10000","title":"The Magna Carta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga67","ownerId":"gutenberg"},{"id":"g10001","title":"Apocolocyntosis","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1105","ownerId":"gutenberg"},{"id":"g10002","title":"The House on the Borderland","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2627","ownerId":"gutenberg"},{"id":"g10003","title":"My First Years as a Frenchwoman, 1876-1879","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2628","ownerId":"gutenberg"},{"id":"g10004","title":"The Warriors","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2629","ownerId":"gutenberg"},{"id":"g10005","title":"A Voyage to the Moon: With Some Account of the Manners and Customs, Science and Philosophy, of the People of Morosofia, and Other Lunarians","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2630","ownerId":"gutenberg"},{"id":"g10006","title":"La Fiammetta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1083","ownerId":"gutenberg"},{"id":"g10007","title":"Carmilla","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga242","ownerId":"gutenberg"},{"id":"g10008","title":"The Mystery","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga218","ownerId":"gutenberg"},{"id":"g10009","title":"Wild Northern Scenes; Or, Sporting Adventures with the Rifle and the Rod","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2631","ownerId":"gutenberg"},{"id":"g1001","title":"Divine Comedy, Longfellow's Translation, Hell","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga436","ownerId":"gutenberg"},{"id":"g10010","title":"The Eulogies of Howard: A Vision","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2426","ownerId":"gutenberg"},{"id":"g10011","title":"365 Foreign Dishes: A Foreign Dish for Every Day in the Year","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga35","ownerId":"gutenberg"},{"id":"g10012","title":"The Mountains of California","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga162","ownerId":"gutenberg"},{"id":"g10013","title":"Punchinello, Volume 1, No. 09, May 28, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10014","title":"Punchinello, Volume 1, No. 18, July 30, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10015","title":"Punchinello, Volume 1, No. 19, August 6, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10016","title":"Punchinello, Volume 1, No. 21, August 20, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10017","title":"Punchinello, Volume 1, No. 23, September 3, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10018","title":"Punchinello, Volume 1, No.
... (32908 bytes in full, cut for the report)
GET /books?limit=200
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "89cce95b934076be"

{"items":[{"id":"b1","title":"The Dispossessed","format":"PAPERBACK","price":"12.99","stock":5,"authorId":"a1","ownerId":"u1"},{"id":"b2","title":"Invisible Cities","format":"HARDCOVER","price":"19.50","stock":2,"authorId":"a2","ownerId":"u2"},{"id":"b3","title":"Kindred","format":"EBOOK","price":"8.00","stock":100,"authorId":"a3","ownerId":"u1"},{"id":"b4","title":"A Wizard of Earthsea","format":"PAPERBACK","price":"9.99","stock":0,"authorId":"a1","ownerId":"u1"},{"id":"g1","title":"The Declaration of Independence of the United States of America","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1","ownerId":"gutenberg"},{"id":"g10","title":"The King James Version of the Bible","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga0","ownerId":"gutenberg"},{"id":"g100","title":"The Complete Works of William Shakespeare","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1000","title":"La Divina Commedia di Dante: Complete","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga436","ownerId":"gutenberg"},{"id":"g10000","title":"The Magna Carta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga67","ownerId":"gutenberg"},{"id":"g10001","title":"Apocolocyntosis","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1105","ownerId":"gutenberg"},{"id":"g10002","title":"The House on the Borderland","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2627","ownerId":"gutenberg"},{"id":"g10003","title":"My First Years as a Frenchwoman, 1876-1879","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2628","ownerId":"gutenberg"},{"id":"g10004","title":"The Warriors","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2629","ownerId":"gutenberg"},{"id":"g10005","title":"A Voyage to the Moon: With Some Account of the Manners and Customs, Science and Philosophy, of the People of Morosofia, and Other Lunarians","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2630","ownerId":"gutenberg"},{"id":"g10006","title":"La Fiammetta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1083","ownerId":"gutenberg"},{"id":"g10007","title":"Carmilla","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga242","ownerId":"gutenberg"},{"id":"g10008","title":"The Mystery","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga218","ownerId":"gutenberg"},{"id":"g10009","title":"Wild Northern Scenes; Or, Sporting Adventures with the Rifle and the Rod","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2631","ownerId":"gutenberg"},{"id":"g1001","title":"Divine Comedy, Longfellow's Translation, Hell","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga436","ownerId":"gutenberg"},{"id":"g10010","title":"The Eulogies of Howard: A Vision","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2426","ownerId":"gutenberg"},{"id":"g10011","title":"365 Foreign Dishes: A Foreign Dish for Every Day in the Year","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga35","ownerId":"gutenberg"},{"id":"g10012","title":"The Mountains of California","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga162","ownerId":"gutenberg"},{"id":"g10013","title":"Punchinello, Volume 1, No. 09, May 28, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10014","title":"Punchinello, Volume 1, No. 18, July 30, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10015","title":"Punchinello, Volume 1, No. 19, August 6, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10016","title":"Punchinello, Volume 1, No. 21, August 20, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10017","title":"Punchinello, Volume 1, No. 23, September 3, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10018","title":"Punchinello, Volume 1, No.
... (32908 bytes in full, cut for the report)
1 more request
GET /books?limit=200
200 OK
cache-control: public, max-age=60
content-type: application/json
etag: "89cce95b934076be"

{"items":[{"id":"b1","title":"The Dispossessed","format":"PAPERBACK","price":"12.99","stock":5,"authorId":"a1","ownerId":"u1"},{"id":"b2","title":"Invisible Cities","format":"HARDCOVER","price":"19.50","stock":2,"authorId":"a2","ownerId":"u2"},{"id":"b3","title":"Kindred","format":"EBOOK","price":"8.00","stock":100,"authorId":"a3","ownerId":"u1"},{"id":"b4","title":"A Wizard of Earthsea","format":"PAPERBACK","price":"9.99","stock":0,"authorId":"a1","ownerId":"u1"},{"id":"g1","title":"The Declaration of Independence of the United States of America","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1","ownerId":"gutenberg"},{"id":"g10","title":"The King James Version of the Bible","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga0","ownerId":"gutenberg"},{"id":"g100","title":"The Complete Works of William Shakespeare","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga56","ownerId":"gutenberg"},{"id":"g1000","title":"La Divina Commedia di Dante: Complete","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga436","ownerId":"gutenberg"},{"id":"g10000","title":"The Magna Carta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga67","ownerId":"gutenberg"},{"id":"g10001","title":"Apocolocyntosis","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1105","ownerId":"gutenberg"},{"id":"g10002","title":"The House on the Borderland","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2627","ownerId":"gutenberg"},{"id":"g10003","title":"My First Years as a Frenchwoman, 1876-1879","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2628","ownerId":"gutenberg"},{"id":"g10004","title":"The Warriors","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2629","ownerId":"gutenberg"},{"id":"g10005","title":"A Voyage to the Moon: With Some Account of the Manners and Customs, Science and Philosophy, of the People of Morosofia, and Other Lunarians","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2630","ownerId":"gutenberg"},{"id":"g10006","title":"La Fiammetta","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga1083","ownerId":"gutenberg"},{"id":"g10007","title":"Carmilla","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga242","ownerId":"gutenberg"},{"id":"g10008","title":"The Mystery","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga218","ownerId":"gutenberg"},{"id":"g10009","title":"Wild Northern Scenes; Or, Sporting Adventures with the Rifle and the Rod","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2631","ownerId":"gutenberg"},{"id":"g1001","title":"Divine Comedy, Longfellow's Translation, Hell","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga436","ownerId":"gutenberg"},{"id":"g10010","title":"The Eulogies of Howard: A Vision","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga2426","ownerId":"gutenberg"},{"id":"g10011","title":"365 Foreign Dishes: A Foreign Dish for Every Day in the Year","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga35","ownerId":"gutenberg"},{"id":"g10012","title":"The Mountains of California","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga162","ownerId":"gutenberg"},{"id":"g10013","title":"Punchinello, Volume 1, No. 09, May 28, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10014","title":"Punchinello, Volume 1, No. 18, July 30, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10015","title":"Punchinello, Volume 1, No. 19, August 6, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10016","title":"Punchinello, Volume 1, No. 21, August 20, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10017","title":"Punchinello, Volume 1, No. 23, September 3, 1870","format":"EBOOK","price":"0.00","stock":1000000,"authorId":"ga104","ownerId":"gutenberg"},{"id":"g10018","title":"Punchinello, Volume 1, No.
... (32908 bytes in full, cut for the report)

GraphQL 1 request

POST /graphql
content-type: application/json

{
  "query": "{ a: books(first: 200) { items { id author { name } } } b: books(first: 200) { items { id author { name } } } c: books(first: 200) { items { id author { name } } } }",
  "variables": {}
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{"data":{"a":{"items":[{"id":"b1","author":{"name":"Ursula K. Le Guin"}},{"id":"b2","author":{"name":"Italo Calvino"}},{"id":"b3","author":{"name":"Octavia E. Butler"}},{"id":"b4","author":{"name":"Ursula K. Le Guin"}},{"id":"g1","author":{"name":"Thomas Jefferson"}},{"id":"g10","author":{"name":"Unknown author"}},{"id":"g100","author":{"name":"William Shakespeare"}},{"id":"g1000","author":{"name":"Dante Alighieri"}},{"id":"g10000","author":{"name":"Anonymous"}},{"id":"g10001","author":{"name":"Lucius Annaeus Seneca"}},{"id":"g10002","author":{"name":"William Hope Hodgson"}},{"id":"g10003","author":{"name":"Mary King Waddington"}},{"id":"g10004","author":{"name":"Anna Robertson Brown Lindsay"}},{"id":"g10005","author":{"name":"George Tucker"}},{"id":"g10006","author":{"name":"Giovanni Boccaccio"}},{"id":"g10007","author":{"name":"Joseph Sheridan Le Fanu"}},{"id":"g10008","author":{"name":"Stewart Edward White"}},{"id":"g10009","author":{"name":"S. H. Hammond"}},{"id":"g1001","author":{"name":"Dante Alighieri"}},{"id":"g10010","author":{"name":"William Hayley"}},{"id":"g10011","author":{"name":"Unknown"}},{"id":"g10012","author":{"name":"John Muir"}},{"id":"g10013","author":{"name":"Various"}},{"id":"g10014","author":{"name":"Various"}},{"id":"g10015","author":{"name":"Various"}},{"id":"g10016","author":{"name":"Various"}},{"id":"g10017","author":{"name":"Various"}},{"id":"g10018","author":{"name":"Various"}},{"id":"g10019","author":{"name":"Various"}},{"id":"g1002","author":{"name":"Dante Alighieri"}},{"id":"g10020","author":{"name":"Various"}},{"id":"g10021","author":{"name":"Ada Leverson"}},{"id":"g10022","author":{"name":"A. J. Bueltmann"}},{"id":"g10023","author":{"name":"Charles S. Brooks"}},{"id":"g10024","author":{"name":"F. J. Cross"}},{"id":"g10025","author":{"name":"Fannie Hurst"}},{"id":"g10026","author":{"name":"Various"}},{"id":"g10027","author":{"name":"Harold Avery"}},{"id":"g10028","author":{"name":"John B. Foster"}},{"id":"g10029","author":{"name":"William Magnay, Sir"}},{"id":"g1003","author":{"name":"Dante Alighieri"}},{"id":"g10030","author":{"name":"Buffalo Bill"}},{"id":"g10031","author":{"name":"Edgar Allan Poe"}},{"id":"g10032","author":{"name":"Various"}},{"id":"g10033","author":{"name":"Various"}},{"id":"g10034","author":{"name":"Various"}},{"id":"g10035","author":{"name":"Various"}},{"id":"g10036","author":{"name":"Various"}},{"id":"g10037","author":{"name":"Edith Ferguson Black"}},{"id":"g10038","author":{"name":"Elizabeth Robins"}},{"id":"g10039","author":{"name":"Aphra Behn"}},{"id":"g1004","author":{"name":"Dante Alighieri"}},{"id":"g10040","author":{"name":"Charles A. Lee"}},{"id":"g10041","author":{"name":"James Branch Cabell"}},{"id":"g10042","author":{"name":"E. R. Murray"}},{"id":"g10043","author":{"name":"Joseph Ladue"}},{"id":"g10044","author":{"name":"William Wood"}},{"id":"g10045","author":{"name":"H. Irving Hancock"}},{"id":"g10046","author":{"name":"John Buchan"}},{"id":"g10047","author":{"name":"Various"}},{"id":"g10048","author":{"name":"Janet D. Wheeler"}},{"id":"g10049","author":{"name":"Mrs. Oliphant"}},{"id":"g1005","author":{"name":"Dante Alighieri"}},{"id":"g10050","author":{"name":"Mrs. Oliphant"}},{"id":"g10051","author":{"name":"Mrs. Oliphant"}},{"id":"g10052","author":{"name":"Mrs. Oliphant"}},{"id":"g10053","author":{"name":"Paul Féval"}},{"id":"g10054","author":{"name":"Jöns Jakob Berzelius, friherre"}},{"id":"g10055","author":{"name":"Gotthold Ephraim Lessing"}},{"id":"g10056","author":{"name":"Confucius"}},{"id":"g10057","author":{"name":"Anthony Hope"}},{"id":"g10058","author":{"name":"Edward J. Quigley"}},{"id":"g10059","author":{"name":"L. Frank Baum"}},{"id":"g1006","author":{"name":"Dante Alighieri"}},{"id":"g10060","author":{"name":"Thomas Henry Huxley"}},{"id":"g10061","author":{"name":"Emile Verhaeren"}},{"id":"g10062","author":{"name":"Henry F. Keenan"}},{"id":"g10063","author":{"name":"Elizabeth Towne"}},{"id":"g10064","author":{"name":"Jeffery Farnol"}},{"id":"g10065","author":{"name":"James M. Beck"}},{"id":"g10066","author":{"name":"Max Brand"}},{"id"
... (30574 bytes in full, cut for the report)

Rayfold 2 requests

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id author { name } } }"
    },
    {
      "id": 2,
      "op": "books",
      "args": {
... 18 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "error": {
    "code": "resource_exhausted",
    "message": "Batch cost 1218 exceeds budget 1000",
    "data": {
      "cost": 1218,
      "budget": 1000
    }
  },
  "fin": true
}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id author { name } } }"
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id author { name } } }"
    },
    {
      "id": 3,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id author { name } } }"
    }
  ]
}

one list, with the titles as well: within the default budget

POST /rayfold
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title author { name } } }",
      "compact": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"items":[{"id":"b1","title":"The Dispossessed","author":{"name":"Ursula K. Le Guin"}},{"id":"b2","title":"Invisible Cities","author":{"name":"Italo Calvino"}},{"id":"b3","title":"Kindred","author":{"name":"Octavia E. Butler"}},{"id":"b4","title":"A Wizard of Earthsea","author":{"name":"Ursula K. Le Guin"}},{"id":"g1","title":"The Declaration of Independence of the United States of America","author":{"name":"Thomas Jefferson"}},{"id":"g10","title":"The King James Version of the Bible","author":{"name":"Unknown author"}},{"id":"g100","title":"The Complete Works of William Shakespeare","author":{"name":"William Shakespeare"}},{"id":"g1000","title":"La Divina Commedia di Dante: Complete","author":{"name":"Dante Alighieri"}},{"id":"g10000","title":"The Magna Carta","author":{"name":"Anonymous"}},{"id":"g10001","title":"Apocolocyntosis","author":{"name":"Lucius Annaeus Seneca"}},{"id":"g10002","title":"The House on the Borderland","author":{"name":"William Hope Hodgson"}},{"id":"g10003","title":"My First Years as a Frenchwoman, 1876-1879","author":{"name":"Mary King Waddington"}},{"id":"g10004","title":"The Warriors","author":{"name":"Anna Robertson Brown Lindsay"}},{"id":"g10005","title":"A Voyage to the Moon: With Some Account of the Manners and Customs, Science and Philosophy, of the People of Morosofia, and Other Lunarians","author":{"name":"George Tucker"}},{"id":"g10006","title":"La Fiammetta","author":{"name":"Giovanni Boccaccio"}},{"id":"g10007","title":"Carmilla","author":{"name":"Joseph Sheridan Le Fanu"}},{"id":"g10008","title":"The Mystery","author":{"name":"Stewart Edward White"}},{"id":"g10009","title":"Wild Northern Scenes; Or, Sporting Adventures with the Rifle and the Rod","author":{"name":"S. H. Hammond"}},{"id":"g1001","title":"Divine Comedy, Longfellow's Translation, Hell","author":{"name":"Dante Alighieri"}},{"id":"g10010","title":"The Eulogies of Howard: A Vision","author":{"name":"William Hayley"}},{"id":"g10011","title":"365 Foreign Dishes: A Foreign Dish for Every Day in the Year","author":{"name":"Unknown"}},{"id":"g10012","title":"The Mountains of California","author":{"name":"John Muir"}},{"id":"g10013","title":"Punchinello, Volume 1, No. 09, May 28, 1870","author":{"name":"Various"}},{"id":"g10014","title":"Punchinello, Volume 1, No. 18, July 30, 1870","author":{"name":"Various"}},{"id":"g10015","title":"Punchinello, Volume 1, No. 19, August 6, 1870","author":{"name":"Various"}},{"id":"g10016","title":"Punchinello, Volume 1, No. 21, August 20, 1870","author":{"name":"Various"}},{"id":"g10017","title":"Punchinello, Volume 1, No. 23, September 3, 1870","author":{"name":"Various"}},{"id":"g10018","title":"Punchinello, Volume 1, No. 05, April 30, 1870","author":{"name":"Various"}},{"id":"g10019","title":"Punchinello, Volume 1, No. 22, August 27, 1870","author":{"name":"Various"}},{"id":"g1002","title":"Divine Comedy, Longfellow's Translation, Purgatory","author":{"name":"Dante Alighieri"}},{"id":"g10020","title":"The Strand Magazine: Vol. 07, Issue 37, January, 1894.: An Illustrated Monthly","author":{"name":"Various"}},{"id":"g10021","title":"Tenterhooks","author":{"name":"Ada Leverson"}},{"id":"g10022","title":"White Queen of the Cannibals: the Story of Mary Slessor of Calabar","author":{"name":"A. J. Bueltmann"}},{"id":"g10023","title":"There's Pippins and Cheese to Come","author":{"name":"Charles S. Brooks"}},{"id":"g10024","title":"Beneath the Banner: Being Narratives of Noble Lives and Brave Deeds","author":{"name":"F. J. Cross"}},{"id":"g10025","title":"Gaslight Sonatas","author":{"name":"Fannie Hurst"}},{"id":"g10026","title":"The Mirror of Literature, Amusement, and Instruction. Volume 10, No. 268, August 11, 1827","author":{"name":"Various"}},{"id":"g10027","title":"The Triple Alliance, Its Trials and Triumphs","author":{"name":"Harold Avery"}},{"id":"g10028","title":"Spalding's Official Baseball Guide - 1913","author":{"name":"John B. Foster"}},{"id":"g10029","title":"The Hunt Ball Mystery","author":{"name":"William Magnay, Sir"}},{"id":"g1003","title":"Divine Comedy, Longfel
... (22111 bytes in full, cut for the report)

Catalogue data from Project Gutenberg (gutenberg.org). Project Gutenberg is not affiliated with Rayfold.

A bigger example

A whole issue tracker, built three ways

A bookstore is a small API. This is the opposite: a multi-tenant issue tracker with 630 issues, 900 comments and 1,156 activity entries across 2 organisations, 7 projects and 18 sprints. It has the things that make an API hard: boards with a page per column, sub-issues, labels, versions, a feed holding four kinds of entry, search across three kinds of thing, per-tenant and per-field permissions, bulk writes and live updates. The same domain was built as REST, as GraphQL (with and without DataLoader) and as Rayfold, and every scenario below ran against all three over real HTTP, checking that they agree before measuring what they cost.

Rayfold was ahead on 10 of 17, level on 7 and behind on none.

Board screen (6 columns, 60 issues with people and labels)

Rayfold ahead

Measured: bytes for one board (bytes on the wire, lower is better)

RESTREST: 57,486 bytes on the wire57,486GraphQLGraphQL: 21,783 bytes on the wire21,783RayfoldRayfold: 9,446 bytes on the wire9,446
REST
57,486 B: a purpose-built endpoint, but a resource has one representation, so every issue arrives whole (description, ids, attachments)
GraphQL
21,783 B: exactly the fields asked for
Rayfold
9,446 B on the binary wire (26,104 B as JSON): the same fields, named once by the server-defined view `Issue.row`

The board is the screen that hurts most: six lists in one page, each needing its own slice of the same table.

See the real requests and responses (4)

REST 1 request

GET /projects/p1/board?limit=10
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "94086e668373a930"

{
  "project": {
    "id": "p1",
    "key": "ING",
    "name": "Ingest pipeline",
    "status": "ACTIVE",
    "startDate": "2026-01-05",
    "targetDate": "2026-03-15",
    "teamId": "t1",
    "leadId": "m01"
  },
  "columns": [
    {
      "state": "TRIAGE",
      "count": 20,
      "issues": [
... 2613 more lines
Full response body
{
  "project": {
    "id": "p1",
    "key": "ING",
    "name": "Ingest pipeline",
    "status": "ACTIVE",
    "startDate": "2026-01-05",
    "targetDate": "2026-03-15",
    "teamId": "t1",
    "leadId": "m01"
  },
  "columns": [
    {
      "state": "TRIAGE",
      "count": 20,
      "issues": [
        {
          "id": "i093",
          "key": "ING-93",
          "title": "Retry the retry budget in the Kotlin runtime",
          "description": "Fix policy pushdown.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T02:00:00.000Z",
          "updatedAt": "2025-12-11T18:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m09",
          "assigneeId": "m04",
          "labelIds": [
            "l01"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m04",
            "role": "MEMBER",
            "user": {
              "id": "u04",
              "name": "Katherine Johnson",
              "avatarUrl": null,
              "email": "katherine.johnson@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            }
          ]
        },
        {
          "id": "i086",
          "key": "ING-86",
          "title": "Remove schema reload after a redeploy",
          "description": "Cache cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-10T19:00:00.000Z",
          "updatedAt": "2025-12-12T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m12",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i085",
          "key": "ING-85",
          "title": "Remove schema reload for offline clients",
          "description": "Cache the idempotency store.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 3,
          "createdAt": "2025-12-10T18:00:00.000Z",
          "updatedAt": "2025-12-11T01:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m07",
          "assigneeId": "m08",
          "labelIds": [
            "l01",
            "l05",
            "l10"
          ],
          "parentId": "i080",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i076",
          "key": "ING-76",
          "title": "Fix cold starts on reconnect",
          "description": "Cache schema reload.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 3,
          "createdAt": "2025-12-10T09:00:00.000Z",
          "updatedAt": "2025-12-11T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m07",
          "labelIds": [
            "l07",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i075",
          "key": "ING-75",
          "title": "Document the retry budget on reconnect",
          "description": "Remove the shape registry.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 5,
          "createdAt": "2025-12-10T08:00:00.000Z",
          "updatedAt": "2025-12-11T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m04",
          "assigneeId": "m10",
          "labelIds": [
            "l01",
            "l07",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i070",
          "key": "ING-70",
          "title": "Document schema reload for large pages",
          "description": "Retry policy pushdown.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-10T03:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m04",
          "labelIds": [
            "l05",
            "l07"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-070.json",
              "contentType": "application/json",
              "size": 378856,
              "url": "https://files.example.com/trace-070.json"
            }
          ],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m04",
            "role": "MEMBER",
            "user": {
              "id": "u04",
              "name": "Katherine Johnson",
              "avatarUrl": null,
              "email": "katherine.johnson@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i052",
          "key": "ING-52",
          "title": "Document cold starts for offline clients",
          "description": "Measure cold starts.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 5,
          "createdAt": "2025-12-09T09:00:00.000Z",
          "updatedAt": "2025-12-10T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m08",
          "assigneeId": "m12",
          "labelIds": [
            "l03",
            "l06",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i047",
          "key": "ING-47",
          "title": "Fix keep-alives after a redeploy",
          "description": "Document keep-alives.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-09T04:00:00.000Z",
          "updatedAt": "2025-12-10T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m11",
          "labelIds": [
            "l02",
            "l06",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m11",
            "role": "MEMBER",
            "user": {
              "id": "u11",
              "name": "Anita Borg",
              "avatarUrl": "https://avatars.example.com/u11.png",
              "email": "anita.borg@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i046",
          "key": "ING-46",
          "title": "Retry keep-alives for large pages",
          "description": "Harden the WebSocket transport.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": 5,
          "createdAt": "2025-12-09T03:00:00.000Z",
          "updatedAt": "2025-12-09T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m09",
          "labelIds": [
            "l06",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i043",
          "key": "ING-43",
          "title": "Fix the WebSocket transport for large pages",
          "description": "Cache the batch planner.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": 5,
          "createdAt": "2025-12-09T00:00:00.000Z",
          "updatedAt": "2025-12-09T17:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": "m11",
          "labelIds": [
            "l02",
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m11",
            "role": "MEMBER",
            "user": {
              "id": "u11",
              "name": "Anita Borg",
              "avatarUrl": "https://avatars.example.com/u11.png",
              "email": "anita.borg@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        }
      ]
    },
    {
      "state": "BACKLOG",
      "count": 15,
      "issues": [
        {
          "id": "i094",
          "key": "ING-94",
          "title": "Retry keep-alives behind a proxy",
          "description": "Fix the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "MEDIUM",
          "estimate": 2,
          "createdAt": "2025-12-11T03:00:00.000Z",
          "updatedAt": "2025-12-11T17:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m03",
          "labelIds": [
            "l04"
          ],
          "parentId": "i093",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i092",
          "key": "ING-92",
          "title": "Refactor the WebSocket transport after a redeploy",
          "description": "Document the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 1,
          "createdAt": "2025-12-11T01:00:00.000Z",
          "updatedAt": "2025-12-12T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": "m06",
          "labelIds": [
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m06",
            "role": "MEMBER",
            "user": {
              "id": "u06",
              "name": "Edsger Dijkstra",
              "avatarUrl": "https://avatars.example.com/u06.png",
              "email": "edsger.dijkstra@acme.example"
            }
          },
          "labels": [
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i089",
          "key": "ING-89",
          "title": "Document cold starts for large pages",
          "description": "Fix the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "MEDIUM",
          "estimate": 2,
          "createdAt": "2025-12-10T22:00:00.000Z",
          "updatedAt": "2025-12-12T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i083",
          "key": "ING-83",
          "title": "Document the retry budget under load",
          "description": "Add policy pushdown.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-10T16:00:00.000Z",
          "updatedAt": "2025-12-11T03:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": "m12",
          "labelIds": [
            "l01",
            "l03",
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i079",
          "key": "ING-79",
          "title": "Remove cursor pagination behind a proxy",
          "description": "Measure the shape registry.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-10T12:00:00.000Z",
          "updatedAt": "2025-12-12T03:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l10"
          ],
          "parentId": "i072",
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i071",
          "key": "ING-71",
          "title": "Remove the idempotency store behind a proxy",
          "description": "Remove schema reload.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 2,
          "createdAt": "2025-12-10T04:00:00.000Z",
          "updatedAt": "2025-12-10T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m01",
          "assigneeId": "m12",
          "labelIds": [],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": []
        },
        {
          "id": "i069",
          "key": "ING-69",
          "title": "Retry the batch planner after a redeploy",
          "description": "Fix the WebSocket transport.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 3,
          "createdAt": "2025-12-10T02:00:00.000Z",
          "updatedAt": "2025-12-11T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i055",
          "key": "ING-55",
          "title": "Harden the retry budget for offline clients",
          "description": "Cache the retry budget.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 5,
          "createdAt": "2025-12-09T12:00:00.000Z",
          "updatedAt": "2025-12-10T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m08",
          "labelIds": [
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i041",
          "key": "ING-41",
          "title": "Investigate the shape registry under load",
          "description": "Remove cursor pagination.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 5,
          "createdAt": "2025-12-08T22:00:00.000Z",
          "updatedAt": "2025-12-10T10:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i040",
          "key": "ING-40",
          "title": "Document schema reload in the Kotlin runtime",
          "description": "Refactor schema reload.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "URGENT",
          "estimate": 5,
          "createdAt": "2025-12-08T21:00:00.000Z",
          "updatedAt": "2025-12-09T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m07",
          "assigneeId": "m12",
          "labelIds": [
            "l06",
            "l09"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-040.json",
              "contentType": "application/json",
              "size": 201090,
              "url": "https://files.example.com/trace-040.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        }
      ]
    },
    {
      "state": "TODO",
      "count": 9,
      "issues": [
        {
          "id": "i078",
          "key": "ING-78",
          "title": "Refactor the WebSocket transport on reconnect",
          "description": "Fix the shape registry.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": 1,
          "createdAt": "2025-12-10T11:00:00.000Z",
          "updatedAt": "2025-12-10T11:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m12",
          "assigneeId": "m02",
          "labelIds": [
            "l04",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i077",
          "key": "ING-77",
          "title": "Remove the batch planner for large pages",
          "description": "Measure the idempotency store.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "MEDIUM",
          "estimate": 3,
          "createdAt": "2025-12-10T10:00:00.000Z",
          "updatedAt": "2025-12-11T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m12",
          "assigneeId": null,
          "labelIds": [
            "l01",
            "l07",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": null,
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i066",
          "key": "ING-66",
          "title": "Retry the idempotency store under load",
          "description": "Cache cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-09T23:00:00.000Z",
          "updatedAt": "2025-12-10T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m12",
          "assigneeId": "m09",
          "labelIds": [
            "l03"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            }
          ]
        },
        {
          "id": "i049",
          "key": "ING-49",
          "title": "Refactor policy pushdown on reconnect",
          "description": "Remove schema reload.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "MEDIUM",
          "estimate": 8,
          "createdAt": "2025-12-09T06:00:00.000Z",
          "updatedAt": "2025-12-10T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m02",
          "assigneeId": "m08",
          "labelIds": [
            "l01",
            "l06",
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i038",
          "key": "ING-38",
          "title": "Document schema reload on slow networks",
          "description": "Remove the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "LOW",
          "estimate": 1,
          "createdAt": "2025-12-08T19:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m12",
          "assigneeId": "m06",
          "labelIds": [
            "l01",
            "l03",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m06",
            "role": "MEMBER",
            "user": {
              "id": "u06",
              "name": "Edsger Dijkstra",
              "avatarUrl": "https://avatars.example.com/u06.png",
              "email": "edsger.dijkstra@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i037",
          "key": "ING-37",
          "title": "Remove policy pushdown for large pages",
          "description": "Document the batch planner.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-08T18:00:00.000Z",
          "updatedAt": "2025-12-09T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": "m10",
          "labelIds": [
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i036",
          "key": "ING-36",
          "title": "Fix policy pushdown behind a proxy",
          "description": "Add cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-08T17:00:00.000Z",
          "updatedAt": "2025-12-10T05:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m12",
          "assigneeId": "m09",
          "labelIds": [],
          "parentId": "i026",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": []
        },
        {
          "id": "i028",
          "key": "ING-28",
          "title": "Retry the shape registry in the Kotlin runtime",
          "description": "Refactor cursor pagination.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "URGENT",
          "estimate": 8,
          "createdAt": "2025-12-08T09:00:00.000Z",
          "updatedAt": "2025-12-08T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": "m12",
          "labelIds": [
            "l02",
            "l03",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i025",
          "key": "ING-25",
          "title": "Fix policy pushdown under load",
          "description": "Measure the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-08T06:00:00.000Z",
          "updatedAt": "2025-12-09T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m04",
          "assigneeId": "m08",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        }
      ]
    },
    {
      "state": "IN_PROGRESS",
      "count": 17,
      "issues": [
        {
          "id": "i100",
          "key": "ING-100",
          "title": "Document the batch planner under load",
          "description": "Document the retry budget.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-11T09:00:00.000Z",
          "updatedAt": "2025-12-12T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m03",
          "assigneeId": "m03",
          "labelIds": [
            "l05",
            "l08"
          ],
          "parentId": "i098",
          "attachments": [
            {
              "filename": "trace-100.json",
              "contentType": "application/json",
              "size": 402342,
              "url": "https://files.example.com/trace-100.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i090",
          "key": "ING-90",
          "title": "Investigate keep-alives on reconnect",
          "description": "Harden the retry budget.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "URGENT",
          "estimate": 5,
          "createdAt": "2025-12-10T23:00:00.000Z",
          "updatedAt": "2025-12-12T00:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m07",
          "assigneeId": null,
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-090.json",
              "contentType": "application/json",
              "size": 255690,
              "url": "https://files.example.com/trace-090.json"
            }
          ],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i067",
          "key": "ING-67",
          "title": "Harden the batch planner behind a proxy",
          "description": "Fix the retry budget.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "MEDIUM",
          "estimate": 13,
          "createdAt": "2025-12-10T00:00:00.000Z",
          "updatedAt": "2025-12-10T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m12",
          "labelIds": [
            "l09",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i065",
          "key": "ING-65",
          "title": "Measure the batch planner on reconnect",
          "description": "Fix policy pushdown.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-09T22:00:00.000Z",
          "updatedAt": "2025-12-10T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m01",
          "labelIds": [
            "l02",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i064",
          "key": "ING-64",
          "title": "Remove keep-alives in the Kotlin runtime",
          "description": "Document keep-alives.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-09T21:00:00.000Z",
          "updatedAt": "2025-12-10T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m04",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l05",
            "l06"
          ],
          "parentId": "i056",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i061",
          "key": "ING-61",
          "title": "Retry keep-alives on reconnect",
          "description": "Measure the batch planner.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "HIGH",
          "estimate": 3,
          "createdAt": "2025-12-09T18:00:00.000Z",
          "updatedAt": "2025-12-09T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m08",
          "assigneeId": "m08",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i058",
          "key": "ING-58",
          "title": "Refactor the batch planner for large pages",
          "description": "Refactor cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-09T15:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m08",
          "assigneeId": "m07",
          "labelIds": [
            "l02",
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i050",
          "key": "ING-50",
          "title": "Refactor policy pushdown for large pages",
          "description": "Add the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "HIGH",
          "estimate": 1,
          "createdAt": "2025-12-09T07:00:00.000Z",
          "updatedAt": "2025-12-09T10:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m05",
          "assigneeId": "m02",
          "labelIds": [
            "l04",
            "l08",
            "l10"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-050.json",
              "contentType": "application/json",
              "size": 362494,
              "url": "https://files.example.com/trace-050.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i030",
          "key": "ING-30",
          "title": "Fix cursor pagination for large pages",
          "description": "Harden keep-alives.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-08T11:00:00.000Z",
          "updatedAt": "2025-12-09T12:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m09",
          "assigneeId": "m02",
          "labelIds": [
            "l02",
            "l04"
          ],
          "parentId": "i023",
          "attachments": [
            {
              "filename": "trace-030.json",
              "contentType": "application/json",
              "size": 141270,
              "url": "https://files.example.com/trace-030.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i026",
          "key": "ING-26",
          "title": "Retry keep-alives on reconnect",
          "description": "Remove the idempotency store.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "NONE",
          "estimate": 2,
          "createdAt": "2025-12-08T07:00:00.000Z",
          "updatedAt": "2025-12-09T00:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m10",
          "assigneeId": "m03",
          "labelIds": [
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        }
      ]
    },
    {
      "state": "IN_REVIEW",
      "count": 9,
      "issues": [
        {
          "id": "i091",
          "key": "ING-91",
          "title": "Refactor the retry budget after a redeploy",
          "description": "Cache the idempotency store.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T00:00:00.000Z",
          "updatedAt": "2025-12-12T04:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m01",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i087",
          "key": "ING-87",
          "title": "Measure the WebSocket transport for offline clients",
          "description": "Cache the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "NONE",
          "estimate": 13,
          "createdAt": "2025-12-10T20:00:00.000Z",
          "updatedAt": "2025-12-11T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l05",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i082",
          "key": "ING-82",
          "title": "Retry the WebSocket transport in the Kotlin runtime",
          "description": "Refactor policy pushdown.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-10T15:00:00.000Z",
          "updatedAt": "2025-12-10T19:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l04",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i072",
          "key": "ING-72",
          "title": "Investigate policy pushdown for offline clients",
          "description": "Refactor the retry budget.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "MEDIUM",
          "estimate": 3,
          "createdAt": "2025-12-10T05:00:00.000Z",
          "updatedAt": "2025-12-10T20:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m10",
          "labelIds": [
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i063",
          "key": "ING-63",
          "title": "Retry the batch planner for large pages",
          "description": "Add schema reload.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-09T20:00:00.000Z",
          "updatedAt": "2025-12-10T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m11",
          "assigneeId": "m08",
          "labelIds": [
            "l05",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i060",
          "key": "ING-60",
          "title": "Measure cold starts under load",
          "description": "Refactor policy pushdown.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-09T17:00:00.000Z",
          "updatedAt": "2025-12-10T01:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": "m01",
          "labelIds": [
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-060.json",
              "contentType": "application/json",
              "size": 301630,
              "url": "https://files.example.com/trace-060.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i054",
          "key": "ING-54",
          "title": "Measure the idempotency store in the Kotlin runtime",
          "description": "Harden cold starts.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-09T11:00:00.000Z",
          "updatedAt": "2025-12-10T23:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m08",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l05",
            "l07"
          ],
          "parentId": "i050",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i016",
          "key": "ING-16",
          "title": "Measure the shape registry on slow networks",
          "description": "Harden the batch planner.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 8,
          "createdAt": "2025-12-07T21:00:00.000Z",
          "updatedAt": "2025-12-08T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m05",
          "assigneeId": "m10",
          "labelIds": [
            "l01",
            "l02"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            }
          ]
        },
        {
          "id": "i010",
          "key": "ING-10",
          "title": "Refactor cursor pagination on reconnect",
          "description": "Fix the WebSocket transport.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "URGENT",
          "estimate": 3,
          "createdAt": "2025-12-07T15:00:00.000Z",
          "updatedAt": "2025-12-07T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m08",
          "assigneeId": "m05",
          "labelIds": [
            "l02",
            "l08"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-010.json",
              "contentType": "application/json",
              "size": 366443,
              "url": "https://files.example.com/trace-010.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m05",
            "role": "MEMBER",
            "user": {
              "id": "u05",
              "name": "Barbara Liskov",
              "avatarUrl": "https://avatars.example.com/u05.png",
              "email": "barbara.liskov@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        }
      ]
    },
    {
      "state": "DONE",
      "count": 15,
      "issues": [
        {
          "id": "i098",
          "key": "ING-98",
          "title": "Investigate policy pushdown behind a proxy",
          "description": "Add cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-11T07:00:00.000Z",
          "updatedAt": "2025-12-11T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": null,
          "labelIds": [],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": null,
          "labels": []
        },
        {
          "id": "i097",
          "key": "ING-97",
          "title": "Refactor the idempotency store on slow networks",
          "description": "Refactor the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T06:00:00.000Z",
          "updatedAt": "2025-12-11T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m10",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i096",
          "key": "ING-96",
          "title": "Add cursor pagination behind a proxy",
          "description": "Remove keep-alives.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-11T05:00:00.000Z",
          "updatedAt": "2025-12-12T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": null,
          "labelIds": [
            "l04",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i095",
          "key": "ING-95",
          "title": "Document the retry budget for large pages",
          "description": "Measure keep-alives.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-11T04:00:00.000Z",
          "updatedAt": "2025-12-11T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m09",
          "assigneeId": null,
          "labelIds": [
            "l02",
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i088",
          "key": "ING-88",
          "title": "Remove schema reload for large pages",
          "description": "Retry keep-alives.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "URGENT",
          "estimate": null,
          "createdAt": "2025-12-10T21:00:00.000Z",
          "updatedAt": "2025-12-11T12:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m03",
          "labelIds": [
            "l01",
            "l05",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i081",
          "key": "ING-81",
          "title": "Add the idempotency store for offline clients",
          "description": "Add schema reload.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-10T14:00:00.000Z",
          "updatedAt": "2025-12-11T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m06",
          "assigneeId": "m01",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i073",
          "key": "ING-73",
          "title": "Document policy pushdown for offline clients",
          "description": "Remove the WebSocket transport.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-10T06:00:00.000Z",
          "updatedAt": "2025-12-11T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m06",
          "assigneeId": "m10",
          "labelIds": [
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i068",
          "key": "ING-68",
          "title": "Measure keep-alives behind a proxy",
          "description": "Measure cold starts.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-10T01:00:00.000Z",
          "updatedAt": "2025-12-10T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m03",
          "labelIds": [
            "l04"
          ],
          "parentId": "i067",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i051",
          "key": "ING-51",
          "title": "Retry the shape registry for offline clients",
          "description": "Refactor cold starts.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-09T08:00:00.000Z",
          "updatedAt": "2025-12-10T23:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m06",
          "assigneeId": "m12",
          "labelIds": [
            "l02",
            "l03",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i048",
          "key": "ING-48",
          "title": "Cache schema reload for large pages",
          "description": "Investigate the retry budget.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "URGENT",
          "estimate": null,
          "createdAt": "2025-12-09T05:00:00.000Z",
          "updatedAt": "2025-12-10T20:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        }
      ]
    }
  ]
}

GraphQL 1 request

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ board(projectId: \"p1\") { project { key name } columns { state count issues(first: 10) { items { id key title state priority updatedAt assignee { id role user { id name avatarUrl } } labels { id name color } } } } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "board": {
      "project": {
        "key": "ING",
        "name": "Ingest pipeline"
      },
      "columns": [
        {
          "state": "TRIAGE",
          "count": 20,
          "issues": {
            "items": [
              {
                "id": "i093",
                "key": "ING-93",
... 1650 more lines
Full response body
{
  "data": {
    "board": {
      "project": {
        "key": "ING",
        "name": "Ingest pipeline"
      },
      "columns": [
        {
          "state": "TRIAGE",
          "count": 20,
          "issues": {
            "items": [
              {
                "id": "i093",
                "key": "ING-93",
                "title": "Retry the retry budget in the Kotlin runtime",
                "state": "TRIAGE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T18:00:00.000Z",
                "assignee": {
                  "id": "m04",
                  "role": "MEMBER",
                  "user": {
                    "id": "u04",
                    "name": "Katherine Johnson",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  }
                ]
              },
              {
                "id": "i086",
                "key": "ING-86",
                "title": "Remove schema reload after a redeploy",
                "state": "TRIAGE",
                "priority": "URGENT",
                "updatedAt": "2025-12-12T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i085",
                "key": "ING-85",
                "title": "Remove schema reload for offline clients",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T01:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i076",
                "key": "ING-76",
                "title": "Fix cold starts on reconnect",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T07:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i075",
                "key": "ING-75",
                "title": "Document the retry budget on reconnect",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T13:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i070",
                "key": "ING-70",
                "title": "Document schema reload for large pages",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m04",
                  "role": "MEMBER",
                  "user": {
                    "id": "u04",
                    "name": "Katherine Johnson",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i052",
                "key": "ING-52",
                "title": "Document cold starts for offline clients",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-10T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i047",
                "key": "ING-47",
                "title": "Fix keep-alives after a redeploy",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T15:00:00.000Z",
                "assignee": {
                  "id": "m11",
                  "role": "MEMBER",
                  "user": {
                    "id": "u11",
                    "name": "Anita Borg",
                    "avatarUrl": "https://avatars.example.com/u11.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i046",
                "key": "ING-46",
                "title": "Retry keep-alives for large pages",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-09T13:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i043",
                "key": "ING-43",
                "title": "Fix the WebSocket transport for large pages",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-09T17:00:00.000Z",
                "assignee": {
                  "id": "m11",
                  "role": "MEMBER",
                  "user": {
                    "id": "u11",
                    "name": "Anita Borg",
                    "avatarUrl": "https://avatars.example.com/u11.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "BACKLOG",
          "count": 15,
          "issues": {
            "items": [
              {
                "id": "i094",
                "key": "ING-94",
                "title": "Retry keep-alives behind a proxy",
                "state": "BACKLOG",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T17:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i092",
                "key": "ING-92",
                "title": "Refactor the WebSocket transport after a redeploy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-12T09:00:00.000Z",
                "assignee": {
                  "id": "m06",
                  "role": "MEMBER",
                  "user": {
                    "id": "u06",
                    "name": "Edsger Dijkstra",
                    "avatarUrl": "https://avatars.example.com/u06.png"
                  }
                },
                "labels": [
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i089",
                "key": "ING-89",
                "title": "Document cold starts for large pages",
                "state": "BACKLOG",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-12T08:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i083",
                "key": "ING-83",
                "title": "Document the retry budget under load",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-11T03:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i079",
                "key": "ING-79",
                "title": "Remove cursor pagination behind a proxy",
                "state": "BACKLOG",
                "priority": "NONE",
                "updatedAt": "2025-12-12T03:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i071",
                "key": "ING-71",
                "title": "Remove the idempotency store behind a proxy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T08:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": []
              },
              {
                "id": "i069",
                "key": "ING-69",
                "title": "Retry the batch planner after a redeploy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T13:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i055",
                "key": "ING-55",
                "title": "Harden the retry budget for offline clients",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-10T08:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i041",
                "key": "ING-41",
                "title": "Investigate the shape registry under load",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-10T10:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i040",
                "key": "ING-40",
                "title": "Document schema reload in the Kotlin runtime",
                "state": "BACKLOG",
                "priority": "URGENT",
                "updatedAt": "2025-12-09T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "TODO",
          "count": 9,
          "issues": {
            "items": [
              {
                "id": "i078",
                "key": "ING-78",
                "title": "Refactor the WebSocket transport on reconnect",
                "state": "TODO",
                "priority": "NONE",
                "updatedAt": "2025-12-10T11:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i077",
                "key": "ING-77",
                "title": "Remove the batch planner for large pages",
                "state": "TODO",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T09:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i066",
                "key": "ING-66",
                "title": "Retry the idempotency store under load",
                "state": "TODO",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T22:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  }
                ]
              },
              {
                "id": "i049",
                "key": "ING-49",
                "title": "Refactor policy pushdown on reconnect",
                "state": "TODO",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T07:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i038",
                "key": "ING-38",
                "title": "Document schema reload on slow networks",
                "state": "TODO",
                "priority": "LOW",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m06",
                  "role": "MEMBER",
                  "user": {
                    "id": "u06",
                    "name": "Edsger Dijkstra",
                    "avatarUrl": "https://avatars.example.com/u06.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i037",
                "key": "ING-37",
                "title": "Remove policy pushdown for large pages",
                "state": "TODO",
                "priority": "LOW",
                "updatedAt": "2025-12-09T15:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i036",
                "key": "ING-36",
                "title": "Fix policy pushdown behind a proxy",
                "state": "TODO",
                "priority": "NONE",
                "updatedAt": "2025-12-10T05:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": []
              },
              {
                "id": "i028",
                "key": "ING-28",
                "title": "Retry the shape registry in the Kotlin runtime",
                "state": "TODO",
                "priority": "URGENT",
                "updatedAt": "2025-12-08T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i025",
                "key": "ING-25",
                "title": "Fix policy pushdown under load",
                "state": "TODO",
                "priority": "NONE",
                "updatedAt": "2025-12-09T15:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "IN_PROGRESS",
          "count": 17,
          "issues": {
            "items": [
              {
                "id": "i100",
                "key": "ING-100",
                "title": "Document the batch planner under load",
                "state": "IN_PROGRESS",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-12T14:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i090",
                "key": "ING-90",
                "title": "Investigate keep-alives on reconnect",
                "state": "IN_PROGRESS",
                "priority": "URGENT",
                "updatedAt": "2025-12-12T00:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i067",
                "key": "ING-67",
                "title": "Harden the batch planner behind a proxy",
                "state": "IN_PROGRESS",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T09:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i065",
                "key": "ING-65",
                "title": "Measure the batch planner on reconnect",
                "state": "IN_PROGRESS",
                "priority": "NONE",
                "updatedAt": "2025-12-10T22:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i064",
                "key": "ING-64",
                "title": "Remove keep-alives in the Kotlin runtime",
                "state": "IN_PROGRESS",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T14:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i061",
                "key": "ING-61",
                "title": "Retry keep-alives on reconnect",
                "state": "IN_PROGRESS",
                "priority": "HIGH",
                "updatedAt": "2025-12-09T22:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i058",
                "key": "ING-58",
                "title": "Refactor the batch planner for large pages",
                "state": "IN_PROGRESS",
                "priority": "LOW",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i050",
                "key": "ING-50",
                "title": "Refactor policy pushdown for large pages",
                "state": "IN_PROGRESS",
                "priority": "HIGH",
                "updatedAt": "2025-12-09T10:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i030",
                "key": "ING-30",
                "title": "Fix cursor pagination for large pages",
                "state": "IN_PROGRESS",
                "priority": "LOW",
                "updatedAt": "2025-12-09T12:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i026",
                "key": "ING-26",
                "title": "Retry keep-alives on reconnect",
                "state": "IN_PROGRESS",
                "priority": "NONE",
                "updatedAt": "2025-12-09T00:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "IN_REVIEW",
          "count": 9,
          "issues": {
            "items": [
              {
                "id": "i091",
                "key": "ING-91",
                "title": "Refactor the retry budget after a redeploy",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-12T04:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i087",
                "key": "ING-87",
                "title": "Measure the WebSocket transport for offline clients",
                "state": "IN_REVIEW",
                "priority": "NONE",
                "updatedAt": "2025-12-11T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i082",
                "key": "ING-82",
                "title": "Retry the WebSocket transport in the Kotlin runtime",
                "state": "IN_REVIEW",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T19:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i072",
                "key": "ING-72",
                "title": "Investigate policy pushdown for offline clients",
                "state": "IN_REVIEW",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T20:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i063",
                "key": "ING-63",
                "title": "Retry the batch planner for large pages",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-10T07:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i060",
                "key": "ING-60",
                "title": "Measure cold starts under load",
                "state": "IN_REVIEW",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T01:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i054",
                "key": "ING-54",
                "title": "Measure the idempotency store in the Kotlin runtime",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-10T23:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i016",
                "key": "ING-16",
                "title": "Measure the shape registry on slow networks",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-08T07:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  }
                ]
              },
              {
                "id": "i010",
                "key": "ING-10",
                "title": "Refactor cursor pagination on reconnect",
                "state": "IN_REVIEW",
                "priority": "URGENT",
                "updatedAt": "2025-12-07T16:00:00.000Z",
                "assignee": {
                  "id": "m05",
                  "role": "MEMBER",
                  "user": {
                    "id": "u05",
                    "name": "Barbara Liskov",
                    "avatarUrl": "https://avatars.example.com/u05.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "DONE",
          "count": 15,
          "issues": {
            "items": [
              {
                "id": "i098",
                "key": "ING-98",
                "title": "Investigate policy pushdown behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T22:00:00.000Z",
                "assignee": null,
                "labels": []
              },
              {
                "id": "i097",
                "key": "ING-97",
                "title": "Refactor the idempotency store on slow networks",
                "state": "DONE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T07:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i096",
                "key": "ING-96",
                "title": "Add cursor pagination behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-12T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i095",
                "key": "ING-95",
                "title": "Document the retry budget for large pages",
                "state": "DONE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T06:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i088",
                "key": "ING-88",
                "title": "Remove schema reload for large pages",
                "state": "DONE",
                "priority": "URGENT",
                "updatedAt": "2025-12-11T12:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i081",
                "key": "ING-81",
                "title": "Add the idempotency store for offline clients",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T14:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i073",
                "key": "ING-73",
                "title": "Document policy pushdown for offline clients",
                "state": "DONE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T14:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i068",
                "key": "ING-68",
                "title": "Measure keep-alives behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T16:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i051",
                "key": "ING-51",
                "title": "Retry the shape registry for offline clients",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T23:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i048",
                "key": "ING-48",
                "title": "Cache schema reload for large pages",
                "state": "DONE",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T20:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              }
            ]
          }
        }
      ]
    }
  }
}

Rayfold 2 requests

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "board",
      "args": {
        "projectId": "p1"
      },
      "shape": "{ project { key name } columns { state count issues(page: { first: 10 }) { items { ...Issue.row } } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "project": {
      "$type": "Project",
      "key": "ING",
      "name": "Ingest pipeline"
    },
    "columns": [
      {
        "state": "TRIAGE",
        "count": 20,
        "issues": {
          "items": [
            {
              "$type": "Issue",
... 1925 more lines
Full response body
{
  "id": 1,
  "data": {
    "project": {
      "$type": "Project",
      "key": "ING",
      "name": "Ingest pipeline"
    },
    "columns": [
      {
        "state": "TRIAGE",
        "count": 20,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i093",
              "key": "ING-93",
              "title": "Retry the retry budget in the Kotlin runtime",
              "state": "TRIAGE",
              "priority": "LOW",
              "updatedAt": "2025-12-11T18:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m04",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u04",
                  "name": "Katherine Johnson",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i086",
              "key": "ING-86",
              "title": "Remove schema reload after a redeploy",
              "state": "TRIAGE",
              "priority": "URGENT",
              "updatedAt": "2025-12-12T02:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i085",
              "key": "ING-85",
              "title": "Remove schema reload for offline clients",
              "state": "TRIAGE",
              "priority": "NONE",
              "updatedAt": "2025-12-11T01:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i076",
              "key": "ING-76",
              "title": "Fix cold starts on reconnect",
              "state": "TRIAGE",
              "priority": "NONE",
              "updatedAt": "2025-12-11T07:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m07",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u07",
                  "name": "Radia Perlman",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i075",
              "key": "ING-75",
              "title": "Document the retry budget on reconnect",
              "state": "TRIAGE",
              "priority": "NONE",
              "updatedAt": "2025-12-11T13:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m10",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u10",
                  "name": "Vint Cerf",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i070",
              "key": "ING-70",
              "title": "Document schema reload for large pages",
              "state": "TRIAGE",
              "priority": "NONE",
              "updatedAt": "2025-12-10T06:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m04",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u04",
                  "name": "Katherine Johnson",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i052",
              "key": "ING-52",
              "title": "Document cold starts for offline clients",
              "state": "TRIAGE",
              "priority": "NONE",
              "updatedAt": "2025-12-10T16:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i047",
              "key": "ING-47",
              "title": "Fix keep-alives after a redeploy",
              "state": "TRIAGE",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-10T15:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m11",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u11",
                  "name": "Anita Borg",
                  "avatarUrl": "https://avatars.example.com/u11.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i046",
              "key": "ING-46",
              "title": "Retry keep-alives for large pages",
              "state": "TRIAGE",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-09T13:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m09",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u09",
                  "name": "Margaret Hamilton",
                  "avatarUrl": "https://avatars.example.com/u09.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i043",
              "key": "ING-43",
              "title": "Fix the WebSocket transport for large pages",
              "state": "TRIAGE",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-09T17:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m11",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u11",
                  "name": "Anita Borg",
                  "avatarUrl": "https://avatars.example.com/u11.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            }
          ]
        }
      },
      {
        "state": "BACKLOG",
        "count": 15,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i094",
              "key": "ING-94",
              "title": "Retry keep-alives behind a proxy",
              "state": "BACKLOG",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-11T17:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m03",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u03",
                  "name": "Alan Turing",
                  "avatarUrl": "https://avatars.example.com/u03.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i092",
              "key": "ING-92",
              "title": "Refactor the WebSocket transport after a redeploy",
              "state": "BACKLOG",
              "priority": "HIGH",
              "updatedAt": "2025-12-12T09:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m06",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u06",
                  "name": "Edsger Dijkstra",
                  "avatarUrl": "https://avatars.example.com/u06.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i089",
              "key": "ING-89",
              "title": "Document cold starts for large pages",
              "state": "BACKLOG",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-12T08:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i083",
              "key": "ING-83",
              "title": "Document the retry budget under load",
              "state": "BACKLOG",
              "priority": "LOW",
              "updatedAt": "2025-12-11T03:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i079",
              "key": "ING-79",
              "title": "Remove cursor pagination behind a proxy",
              "state": "BACKLOG",
              "priority": "NONE",
              "updatedAt": "2025-12-12T03:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i071",
              "key": "ING-71",
              "title": "Remove the idempotency store behind a proxy",
              "state": "BACKLOG",
              "priority": "HIGH",
              "updatedAt": "2025-12-10T08:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": []
            },
            {
              "$type": "Issue",
              "id": "i069",
              "key": "ING-69",
              "title": "Retry the batch planner after a redeploy",
              "state": "BACKLOG",
              "priority": "HIGH",
              "updatedAt": "2025-12-11T13:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i055",
              "key": "ING-55",
              "title": "Harden the retry budget for offline clients",
              "state": "BACKLOG",
              "priority": "LOW",
              "updatedAt": "2025-12-10T08:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i041",
              "key": "ING-41",
              "title": "Investigate the shape registry under load",
              "state": "BACKLOG",
              "priority": "LOW",
              "updatedAt": "2025-12-10T10:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i040",
              "key": "ING-40",
              "title": "Document schema reload in the Kotlin runtime",
              "state": "BACKLOG",
              "priority": "URGENT",
              "updatedAt": "2025-12-09T16:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            }
          ]
        }
      },
      {
        "state": "TODO",
        "count": 9,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i078",
              "key": "ING-78",
              "title": "Refactor the WebSocket transport on reconnect",
              "state": "TODO",
              "priority": "NONE",
              "updatedAt": "2025-12-10T11:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m02",
                "role": "ADMIN",
                "user": {
                  "$type": "User",
                  "id": "u02",
                  "name": "Grace Hopper",
                  "avatarUrl": "https://avatars.example.com/u02.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i077",
              "key": "ING-77",
              "title": "Remove the batch planner for large pages",
              "state": "TODO",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-11T09:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i066",
              "key": "ING-66",
              "title": "Retry the idempotency store under load",
              "state": "TODO",
              "priority": "HIGH",
              "updatedAt": "2025-12-10T22:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m09",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u09",
                  "name": "Margaret Hamilton",
                  "avatarUrl": "https://avatars.example.com/u09.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i049",
              "key": "ING-49",
              "title": "Refactor policy pushdown on reconnect",
              "state": "TODO",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-10T07:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i038",
              "key": "ING-38",
              "title": "Document schema reload on slow networks",
              "state": "TODO",
              "priority": "LOW",
              "updatedAt": "2025-12-10T06:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m06",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u06",
                  "name": "Edsger Dijkstra",
                  "avatarUrl": "https://avatars.example.com/u06.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i037",
              "key": "ING-37",
              "title": "Remove policy pushdown for large pages",
              "state": "TODO",
              "priority": "LOW",
              "updatedAt": "2025-12-09T15:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m10",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u10",
                  "name": "Vint Cerf",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i036",
              "key": "ING-36",
              "title": "Fix policy pushdown behind a proxy",
              "state": "TODO",
              "priority": "NONE",
              "updatedAt": "2025-12-10T05:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m09",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u09",
                  "name": "Margaret Hamilton",
                  "avatarUrl": "https://avatars.example.com/u09.png"
                }
              },
              "labels": []
            },
            {
              "$type": "Issue",
              "id": "i028",
              "key": "ING-28",
              "title": "Retry the shape registry in the Kotlin runtime",
              "state": "TODO",
              "priority": "URGENT",
              "updatedAt": "2025-12-08T16:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i025",
              "key": "ING-25",
              "title": "Fix policy pushdown under load",
              "state": "TODO",
              "priority": "NONE",
              "updatedAt": "2025-12-09T15:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            }
          ]
        }
      },
      {
        "state": "IN_PROGRESS",
        "count": 17,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i100",
              "key": "ING-100",
              "title": "Document the batch planner under load",
              "state": "IN_PROGRESS",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-12T14:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m03",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u03",
                  "name": "Alan Turing",
                  "avatarUrl": "https://avatars.example.com/u03.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i090",
              "key": "ING-90",
              "title": "Investigate keep-alives on reconnect",
              "state": "IN_PROGRESS",
              "priority": "URGENT",
              "updatedAt": "2025-12-12T00:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i067",
              "key": "ING-67",
              "title": "Harden the batch planner behind a proxy",
              "state": "IN_PROGRESS",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-10T09:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i065",
              "key": "ING-65",
              "title": "Measure the batch planner on reconnect",
              "state": "IN_PROGRESS",
              "priority": "NONE",
              "updatedAt": "2025-12-10T22:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m01",
                "role": "OWNER",
                "user": {
                  "$type": "User",
                  "id": "u01",
                  "name": "Ada Lovelace",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i064",
              "key": "ING-64",
              "title": "Remove keep-alives in the Kotlin runtime",
              "state": "IN_PROGRESS",
              "priority": "URGENT",
              "updatedAt": "2025-12-10T14:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i061",
              "key": "ING-61",
              "title": "Retry keep-alives on reconnect",
              "state": "IN_PROGRESS",
              "priority": "HIGH",
              "updatedAt": "2025-12-09T22:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i058",
              "key": "ING-58",
              "title": "Refactor the batch planner for large pages",
              "state": "IN_PROGRESS",
              "priority": "LOW",
              "updatedAt": "2025-12-10T06:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m07",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u07",
                  "name": "Radia Perlman",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i050",
              "key": "ING-50",
              "title": "Refactor policy pushdown for large pages",
              "state": "IN_PROGRESS",
              "priority": "HIGH",
              "updatedAt": "2025-12-09T10:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m02",
                "role": "ADMIN",
                "user": {
                  "$type": "User",
                  "id": "u02",
                  "name": "Grace Hopper",
                  "avatarUrl": "https://avatars.example.com/u02.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i030",
              "key": "ING-30",
              "title": "Fix cursor pagination for large pages",
              "state": "IN_PROGRESS",
              "priority": "LOW",
              "updatedAt": "2025-12-09T12:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m02",
                "role": "ADMIN",
                "user": {
                  "$type": "User",
                  "id": "u02",
                  "name": "Grace Hopper",
                  "avatarUrl": "https://avatars.example.com/u02.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i026",
              "key": "ING-26",
              "title": "Retry keep-alives on reconnect",
              "state": "IN_PROGRESS",
              "priority": "NONE",
              "updatedAt": "2025-12-09T00:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m03",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u03",
                  "name": "Alan Turing",
                  "avatarUrl": "https://avatars.example.com/u03.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            }
          ]
        }
      },
      {
        "state": "IN_REVIEW",
        "count": 9,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i091",
              "key": "ING-91",
              "title": "Refactor the retry budget after a redeploy",
              "state": "IN_REVIEW",
              "priority": "LOW",
              "updatedAt": "2025-12-12T04:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i087",
              "key": "ING-87",
              "title": "Measure the WebSocket transport for offline clients",
              "state": "IN_REVIEW",
              "priority": "NONE",
              "updatedAt": "2025-12-11T02:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i082",
              "key": "ING-82",
              "title": "Retry the WebSocket transport in the Kotlin runtime",
              "state": "IN_REVIEW",
              "priority": "HIGH",
              "updatedAt": "2025-12-10T19:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m07",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u07",
                  "name": "Radia Perlman",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i072",
              "key": "ING-72",
              "title": "Investigate policy pushdown for offline clients",
              "state": "IN_REVIEW",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-10T20:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m10",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u10",
                  "name": "Vint Cerf",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i063",
              "key": "ING-63",
              "title": "Retry the batch planner for large pages",
              "state": "IN_REVIEW",
              "priority": "LOW",
              "updatedAt": "2025-12-10T07:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i060",
              "key": "ING-60",
              "title": "Measure cold starts under load",
              "state": "IN_REVIEW",
              "priority": "URGENT",
              "updatedAt": "2025-12-10T01:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m01",
                "role": "OWNER",
                "user": {
                  "$type": "User",
                  "id": "u01",
                  "name": "Ada Lovelace",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i054",
              "key": "ING-54",
              "title": "Measure the idempotency store in the Kotlin runtime",
              "state": "IN_REVIEW",
              "priority": "LOW",
              "updatedAt": "2025-12-10T23:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i016",
              "key": "ING-16",
              "title": "Measure the shape registry on slow networks",
              "state": "IN_REVIEW",
              "priority": "LOW",
              "updatedAt": "2025-12-08T07:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m10",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u10",
                  "name": "Vint Cerf",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i010",
              "key": "ING-10",
              "title": "Refactor cursor pagination on reconnect",
              "state": "IN_REVIEW",
              "priority": "URGENT",
              "updatedAt": "2025-12-07T16:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m05",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u05",
                  "name": "Barbara Liskov",
                  "avatarUrl": "https://avatars.example.com/u05.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            }
          ]
        }
      },
      {
        "state": "DONE",
        "count": 15,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i098",
              "key": "ING-98",
              "title": "Investigate policy pushdown behind a proxy",
              "state": "DONE",
              "priority": "HIGH",
              "updatedAt": "2025-12-11T22:00:00.000Z",
              "assignee": null,
              "labels": []
            },
            {
              "$type": "Issue",
              "id": "i097",
              "key": "ING-97",
              "title": "Refactor the idempotency store on slow networks",
              "state": "DONE",
              "priority": "LOW",
              "updatedAt": "2025-12-11T07:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m07",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u07",
                  "name": "Radia Perlman",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i096",
              "key": "ING-96",
              "title": "Add cursor pagination behind a proxy",
              "state": "DONE",
              "priority": "HIGH",
              "updatedAt": "2025-12-12T02:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i095",
              "key": "ING-95",
              "title": "Document the retry budget for large pages",
              "state": "DONE",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-11T06:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i088",
              "key": "ING-88",
              "title": "Remove schema reload for large pages",
              "state": "DONE",
              "priority": "URGENT",
              "updatedAt": "2025-12-11T12:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m03",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u03",
                  "name": "Alan Turing",
                  "avatarUrl": "https://avatars.example.com/u03.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i081",
              "key": "ING-81",
              "title": "Add the idempotency store for offline clients",
              "state": "DONE",
              "priority": "HIGH",
              "updatedAt": "2025-12-11T14:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m01",
                "role": "OWNER",
                "user": {
                  "$type": "User",
                  "id": "u01",
                  "name": "Ada Lovelace",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i073",
              "key": "ING-73",
              "title": "Document policy pushdown for offline clients",
              "state": "DONE",
              "priority": "LOW",
              "updatedAt": "2025-12-11T14:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m10",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u10",
                  "name": "Vint Cerf",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i068",
              "key": "ING-68",
              "title": "Measure keep-alives behind a proxy",
              "state": "DONE",
              "priority": "HIGH",
              "updatedAt": "2025-12-10T16:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m03",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u03",
                  "name": "Alan Turing",
                  "avatarUrl": "https://avatars.example.com/u03.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i051",
              "key": "ING-51",
              "title": "Retry the shape registry for offline clients",
              "state": "DONE",
              "priority": "HIGH",
              "updatedAt": "2025-12-10T23:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i048",
              "key": "ING-48",
              "title": "Cache schema reload for large pages",
              "state": "DONE",
              "priority": "URGENT",
              "updatedAt": "2025-12-10T20:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m07",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u07",
                  "name": "Radia Perlman",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            }
          ]
        }
      }
    ]
  },
  "meta": {
    "cost": 49
  },
  "fin": true
}
POST /rayfold
accept: application/rayfold
authorization: Bearer u01
content-type: application/rayfold

RB request, 141 bytes on the wire, shown decoded:
{"ops":[{"id":1,"op":"board","args":{"projectId":"p1"},"shape":"{ project { key name } columns { state count issues(page: { first: 10 }) { items { ...Issue.row } } } }","compact":true}]}
200 OK
cache-control: no-store
content-type: application/rayfold

RB, 9297 bytes on the wire, shown decoded:
{"id":1,"data":{"project":{"key":"ING","name":"Ingest pipeline"},"columns":[{"state":"TRIAGE","count":20,"issues":{"items":[{"id":"i093","key":"ING-93","title":"Retry the retry budget in the Kotlin runtime","state":"TRIAGE","priority":"LOW","updatedAt":"2025-12-11T18:00:00.000Z","assignee":{"id":"m04","role":"MEMBER","user":{"id":"u04","name":"Katherine Johnson","avatarUrl":null}},"labels":[{"id":"l01","name":"bug","color":"#d73a4a"}]},{"id":"i086","key":"ING-86","title":"Remove schema reload after a redeploy","state":"TRIAGE","priority":"URGENT","updatedAt":"2025-12-12T02:00:00.000Z","assignee":null,"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l08","name":"infra","color":"#5319e7"},{"id":"l10","name":"regression","color":"#e99695"}]},{"id":"i085","key":"ING-85","title":"Remove schema reload for offline clients","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-11T01:00:00.000Z","assignee":{"id":"m08","role":"MEMBER","user":{"id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"id":"l01","name":"bug","color":"#d73a4a"},{"id":"l05","name":"performance","color":"#a2eeef"},{"id":"l10","name":"regression","color":"#e99695"}]},{"id":"i076","key":"ING-76","title":"Fix cold starts on reconnect","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-11T07:00:00.000Z","assignee":{"id":"m07","role":"MEMBER","user":{"id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"id":"l07","name":"ux","color":"#d4c5f9"},{"id":"l08","name":"infra","color":"#5319e7"},{"id":"l09","name":"flaky","color":"#fbca04"}]},{"id":"i075","key":"ING-75","title":"Document the retry budget on reconnect","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-11T13:00:00.000Z","assignee":{"id":"m10","role":"MEMBER","user":{"id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"id":"l01","name":"bug","color":"#d73a4a"},{"id":"l07","name":"ux","color":"#d4c5f9"},{"id":"l09","name":"flaky","color":"#fbca04"}]},{"id":"i070","key":"ING-70","title":"Document schema reload for large pages","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-10T06:00:00.000Z","assignee":{"id":"m04","role":"MEMBER","user":{"id":"u04","name":"Katherine Johnson","avatarUrl":null}},"labels":[{"id":"l05","name":"performance","color":"#a2eeef"},{"id":"l07","name":"ux","color":"#d4c5f9"}]},{"id":"i052","key":"ING-52","title":"Document cold starts for offline clients","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-10T16:00:00.000Z","assignee":{"id":"m12","role":"GUEST","user":{"id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l06","name":"security","color":"#b60205"},{"id":"l08","name":"infra","color":"#5319e7"}]},{"id":"i047","key":"ING-47","title":"Fix keep-alives after a redeploy","state":"TRIAGE","priority":"MEDIUM","updatedAt":"2025-12-10T15:00:00.000Z","assignee":{"id":"m11","role":"MEMBER","user":{"id":"u11","name":"Anita Borg","avatarUrl":"https://avatars.example.com/u11.png"}},"labels":[{"id":"l02","name":"feature","color":"#0e8a16"},{"id":"l06","name":"security","color":"#b60205"},{"id":"l10","name":"regression","color":"#e99695"}]},{"id":"i046","key":"ING-46","title":"Retry keep-alives for large pages","state":"TRIAGE","priority":"MEDIUM","updatedAt":"2025-12-09T13:00:00.000Z","assignee":{"id":"m09","role":"MEMBER","user":{"id":"u09","name":"Margaret Hamilton","avatarUrl":"https://avatars.example.com/u09.png"}},"labels":[{"id":"l06","name":"security","color":"#b60205"},{"id":"l08","name":"infra","color":"#5319e7"}]},{"id":"i043","key":"ING-43","title":"Fix the WebSocket transport for large pages","state":"TRIAGE","priority":"MEDIUM","updatedAt":"2025-12-09T17:00:00.000Z","assignee":{"id":"m11","role":"MEMBER","user":{"id":"u11","name":"Anita Borg","avatarUrl":"https://avatars.example.com/u11.png"}},"labels":[{"id":"l02","name":"feature","color":"#0e8a16"},{"id":"l05","name":"performance","color":"#a2eeef"},{"id":"l06","name":"security","color":"#b60205"}]}]}},{"state":"BACKLOG","count":15,"issues":{"items":[{"id":"i094","key":"ING-94","title":"Retry keep-alives behind a proxy","state":"BACKLOG","priority":"MEDIUM","updatedAt":"2025-12-11T17:00:00.000Z","assignee":{"id":"m03","role":"MEMBER","user":{"id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"id":"l04","name":"docs","color":"#0075ca"}]},{"id":"i092","key":"ING-92","title":"Refactor the WebSocket transport after a redeploy","state":"BACKLOG","priority":"HIGH","updatedAt":"2025-12-12T09:00:00.000Z","assignee":{"id":"m06","role":"MEMBER","user":{"id":"u06","name":"Edsger Dijkstra","avatarUrl":"https://avatars.example.com/u06.png"}},"labels":[{"id":"l07","name":"ux","color":"#d4c5f9"}]},{"id":"i089","key":"ING-89","title":"Document cold starts for large pages","state":"BACKLOG","priority":"MEDIUM","updatedAt":"2025-12-12T08:00:00.000Z","assignee":null,"labels":[{"id":"l06","name":"security","color":"#b60205"}]},{"id":"i083","key":"ING-83","title":"Document the retry budget under load","state":"BACKLOG","priority":"LOW","updatedAt":"2025-12-11T03:00:00.000Z","assignee":{"id":"m12","role":"GUEST","user":{"id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"id":"l01","name":"bug","color":"#d73a4a"},{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l07","name":"ux","color":"#d4c5f9"}]},{"id":"i079","key":"ING-79","title":"Remove cursor pagination behind a proxy","state":"BACKLOG","priority":"NONE","updatedAt":"2025-12-12T03:00:00.000Z","assignee":null,"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l08","name":"infra","color":"#5319e7"},{"id":"l10","name":"regression","color":"#e99695"}]},{"id":"i071","key":"ING-71","title":"Remove the idempotency store behind a proxy","state":"BACKLOG","priority":"HIGH","updatedAt":"2025-12-10T08:00:00.000Z","assignee":{"id":"m12","role":"GUEST","user":{"id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[]},{"id":"i069","key":"ING-69","title":"Retry the batch planner after a redeploy","state":"BACKLOG","priority":"HIGH","updatedAt":"2025-12-11T13:00:00.000Z","assignee":null,"labels":[{"id":"l04","name":"docs","color":"#0075ca"}]},{"id":"i055","key":"ING-55","title":"Harden the retry budget for offline clients","state":"BACKLOG","priority":"LOW","updatedAt":"2025-12-10T08:00:00.000Z","assignee":{"id":"m08","role":"MEMBER","user":{"id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"id":"l06","name":"security","color":"#b60205"}]},{"id":"i041","key":"ING-41","title":"Investigate the shape registry under load","state":"BACKLOG","priority":"LOW","updatedAt":"2025-12-10T10:00:00.000Z","assignee":null,"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l08","name":"infra","color":"#5319e7"},{"id":"l09","name":"flaky","color":"#fbca04"}]},{"id":"i040","key":"ING-40","title":"Document schema reload in the Kotlin runtime","state":"BACKLOG","priority":"URGENT","updatedAt":"2025-12-09T16:00:00.000Z","assignee":{"id":"m12","role":"GUEST","user":{"id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"id":"l06","name":"security","color":"#b60205"},{"id":"l09","name":"flaky","color":"#fbca04"}]}]}},{"state":"TODO","count":9,"issues":{"items":[{"id":"i078","key":"ING-78","title":"Refactor the WebSocket transport on reconnect","state":"TODO","priority":"NONE","updatedAt":"2025-12-10T11:00:00.000Z","assignee":{"id":"m02","role":"ADMIN","user":{"id":"u02","name":"Grace Hopper","avatarUrl":"https://avatars.example.com/u02.png"}},"labels":[{"id":"l04","name":"docs","color":"#0075ca"},{"id":"l10","name":"regression","color":"#e99695"}]},{"id":"i077","key":"ING-77","title":"Remove the batch planner for large pages","state":"TODO","priority":"MEDIUM","updatedAt":"2025-12-11T09:00:00.000Z","assignee":null,"labels":[{"id":"l01","name":"bug","color":"#d73a4a"},{"id":"l07","name":"ux","color":"#d4c5f9"},{"id":"l08","name":"infra","color":"#5319e7"}]},{"id":"i066","key":"ING-66","title":"Retry the idempotency store under load","state":"TODO","priority":"HIGH","updatedAt":"2025-12-10T22:00:00.000Z","assignee":{"id":"m09","role":"MEMBER","user":{"id":"u09","name":"Margaret Hamilton","avatarUrl":"https://avatars.example.com/u09.png"}},"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"}]},{"id":"i049","key":"ING-49","title":"Refactor policy pushdown on reconnect","state":"TODO","priority":"MEDIUM","updatedAt":"2025-12-10T07:00:00.000Z","assignee":{"id":"m08","role":"MEMBER","user":{"id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"id":"l01","name":"bug","color":"#d73a4a"},{"id":"l06","name":"security","color":"#b60205"},{"id":"l07","name":"ux","color":"#d4c5f9"}]},{"id":"i038","key":"ING-38","title":"Document schema reload on slow networks","state":"TODO","priority":"LOW","updatedAt":"2025-12-10T06:00:00.000Z","assignee":{"id":"m06","role":"MEMBER","user":{"id":"u06","name":"Edsger Dijkstra","avatarUrl":"https://avatars.example.com/u06.png"}},"labels":[{"id":"l01","name":"bug","color":"#d73a4a"},{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l06","name":"security","color":"#b60205"}]},{"id":"i037","key":"ING-37","title":"Remove policy pushdown for large pages","state":"TODO","priority":"LOW","updatedAt":"2025-12-09T15:00:00.000Z","assignee":{"id":"m10","role":"MEMBER","user":{"id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"id":"l05","name":"performance","color":"#a2eeef"},{"id":"l06","name":"security","color":"#b60205"}]},{"id":"i036","key":"ING-36","title":"Fix policy pushdown behind a proxy","state":"TODO","priority":"NONE","updatedAt":"2025-12-10T05:00:00.000Z","assignee":{"id":"m09","role":"MEMBER","user":{"id":"u09","name":"Margaret Hamilton","avatarUrl":"https://avatars.example.com/u09.png"}},"labels":[]},{"id":"i028","key":"ING-28","title":"Retry the shape registry in the Kotlin runtime","state":"TODO","priority":"URGENT","updatedAt":"2025-12-08T16:00:00.000Z","assignee":{"id":"m12","role":"GUEST","user":{"id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"id":"l02","name":"feature","color":"#0e8a16"},{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l05","name":"performance","color":"#a2eeef"}]},{"id":"i025","key":"ING-25","title":"Fix policy pushdown under load","state":"TODO","priority":"NONE","updatedAt":"2025-12-09T15:00:00.000Z","assignee":{"id":"m08","role":"MEMBER","user":{"id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"id":"l04","name":"docs","color":"#0075ca"}]}]}},{"state":"IN_PROGRESS","count":17,"issues":{"items":[{"id":"i100","key":"ING-100","title":"Document the batch planner under load","state":"IN_PROGRESS","priority":"MEDIUM","updatedAt":"2025-12-12T14:00:00.000Z","assignee":{"id":"m03","role":"MEMBER","user":{"id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"id":"l05","name":"performance","color":"#a2eeef"},{"id":"l08","name":"infra","color":"#5319e7"}]},{"id":"i090","key":"ING-90","title":"Investigate keep-alives on reconnect","state":"IN_PROGRESS","priority":"URGENT","updatedAt":"2025-12-12T00:00:00.000Z","assignee":null,"labels":[{"id":"l04","name":"docs","color":"#0075ca"}]},{"id":"i067","key":"ING-67","title":"Harden the batch planner behind a proxy","state":"IN_PROGRESS","priority":"MEDIUM","updatedAt":"2025-12-10T09:00:00.000Z","assignee":{"id":"m12","role":"GUEST","user":{"id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"id":"l09","name":"flaky","color":"#fbca04"},{"id":"l10","name":"regression","color":"#e99695"}]},{"id":"i065","key":"ING-65","title":"Measure the batch planner on reconnect","state":"IN_PROGRESS","priority":"NONE","updatedAt":"2025-12-10T22:00:00.000Z","assignee":{"id":"m01","role":"OWNER","user":{"id":"u01","name":"Ada Lovelace","avatarUrl":null}},"labels":[{"id":"l02","name":"feature","color":"#0e8a16"},{"id":"l05","name":"performance","color":"#a2eeef"}]},{"id":"i064","key":"ING-64","title":"Remove keep-alives in the Kotlin runtime","state":"IN_PROGRESS","priority":"URGENT","updatedAt":"2025-12-10T14:00:00.000Z","assignee":{"id":"m08","role":"MEMBER","user":{"id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l05","name":"performance","color":"#a2eeef"},{"id":"l06","name":"security","color":"#b60205"}]},{"id":"i061","key":"ING-61","title":"Retry keep-alives on reconnect","state":"IN_PROGRESS","priority":"HIGH","updatedAt":"2025-12-09T22:00:00.000Z","assignee":{"id":"m08","role":"MEMBER","user":{"id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"id":"l04","name":"docs","color":"#0075ca"}]},{"id":"i058","key":"ING-58","title":"Refactor the batch planner for large pages","state":"IN_PROGRESS","priority":"LOW","updatedAt":"2025-12-10T06:00:00.000Z","assignee":{"id":"m07","role":"MEMBER","user":{"id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"id":"l02","name":"feature","color":"#0e8a16"},{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l08","name":"infra","color":"#5319e7"}]},{"id":"i050","key":"ING-50","title":"Refactor policy pushdown for large pages","state":"IN_PROGRESS","priority":"HIGH","updatedAt":"2025-12-09T10:00:00.000Z","assignee":{"id":"m02","role":"ADMIN","user":{"id":"u02","name":"Grace Hopper","avatarUrl":"https://avatars.example.com/u02.png"}},"labels":[{"id":"l04","name":"docs","color":"#0075ca"},{"id":"l08","name":"infra","color":"#5319e7"},{"id":"l10","name":"regression","color":"#e99695"}]},{"id":"i030","key":"ING-30","title":"Fix cursor pagination for large pages","state":"IN_PROGRESS","priority":"LOW","updatedAt":"2025-12-09T12:00:00.000Z","assignee":{"id":"m02","role":"ADMIN","user":{"id":"u02","name":"Grace Hopper","avatarUrl":"https://avatars.example.com/u02.png"}},"labels":[{"id":"l02","name":"feature","color":"#0e8a16"},{"id":"l04","name":"docs","color":"#0075ca"}]},{"id":"i026","key":"ING-26","title":"Retry keep-alives on reconnect","state":"IN_PROGRESS","priority":"NONE","updatedAt":"2025-12-09T00:00:00.000Z","assignee":{"id":"m03","role":"MEMBER","user":{"id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"id":"l08","name":"infra","color":"#5319e7"}]}]}},{"state":"IN_REVIEW","count":9,"issues":{"items":[{"id":"i091","key":"ING-91","title":"Refactor the retry budget after a redeploy","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-12T04:00:00.000Z","assignee":{"id":"m08","role":"MEMBER","user":{"id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l04","name":"docs","color":"#0075ca"}]},{"id":"i087","key":"ING-87","title":"Measure the WebSocket transport for offline clients","state":"IN_REVIEW","priority":"NONE","updatedAt":"2025-12-11T02:00:00.000Z","assignee":null,"labels":[{"id":"l05","name":"performance","color":"#a2eeef"},{"id":"l10","name":"regression","color":"#e99695"}]},{"id":"i082","key":"ING-82","title":"Retry the WebSocket transport in the Kotlin runtime","state":"IN_REVIEW","priority":"HIGH","updatedAt":"2025-12-10T19:00:00.000Z","assignee":{"id":"m07","role":"MEMBER","user":{"id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l04","name":"docs","color":"#0075ca"},{"id":"l08","name":"infra","color":"#5319e7"}]},{"id":"i072","key":"ING-72","title":"Investigate policy pushdown for offline clients","state":"IN_REVIEW","priority":"MEDIUM","updatedAt":"2025-12-10T20:00:00.000Z","assignee":{"id":"m10","role":"MEMBER","user":{"id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l08","name":"infra","color":"#5319e7"}]},{"id":"i063","key":"ING-63","title":"Retry the batch planner for large pages","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-10T07:00:00.000Z","assignee":{"id":"m08","role":"MEMBER","user":{"id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"id":"l05","name":"performance","color":"#a2eeef"},{"id":"l09","name":"flaky","color":"#fbca04"}]},{"id":"i060","key":"ING-60","title":"Measure cold starts under load","state":"IN_REVIEW","priority":"URGENT","updatedAt":"2025-12-10T01:00:00.000Z","assignee":{"id":"m01","role":"OWNER","user":{"id":"u01","name":"Ada Lovelace","avatarUrl":null}},"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l08","name":"infra","color":"#5319e7"}]},{"id":"i054","key":"ING-54","title":"Measure the idempotency store in the Kotlin runtime","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-10T23:00:00.000Z","assignee":{"id":"m08","role":"MEMBER","user":{"id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l05","name":"performance","color":"#a2eeef"},{"id":"l07","name":"ux","color":"#d4c5f9"}]},{"id":"i016","key":"ING-16","title":"Measure the shape registry on slow networks","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-08T07:00:00.000Z","assignee":{"id":"m10","role":"MEMBER","user":{"id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"id":"l01","name":"bug","color":"#d73a4a"},{"id":"l02","name":"feature","color":"#0e8a16"}]},{"id":"i010","key":"ING-10","title":"Refactor cursor pagination on reconnect","state":"IN_REVIEW","priority":"URGENT","updatedAt":"2025-12-07T16:00:00.000Z","assignee":{"id":"m05","role":"MEMBER","user":{"id":"u05","name":"Barbara Liskov","avatarUrl":"https://avatars.example.com/u05.png"}},"labels":[{"id":"l02","name":"feature","color":"#0e8a16"},{"id":"l08","name":"infra","color":"#5319e7"}]}]}},{"state":"DONE","count":15,"issues":{"items":[{"id":"i098","key":"ING-98","title":"Investigate policy pushdown behind a proxy","state":"DONE","priority":"HIGH","updatedAt":"2025-12-11T22:00:00.000Z","assignee":null,"labels":[]},{"id":"i097","key":"ING-97","title":"Refactor the idempotency store on slow networks","state":"DONE","priority":"LOW","updatedAt":"2025-12-11T07:00:00.000Z","assignee":{"id":"m07","role":"MEMBER","user":{"id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l10","name":"regression","color":"#e99695"}]},{"id":"i096","key":"ING-96","title":"Add cursor pagination behind a proxy","state":"DONE","priority":"HIGH","updatedAt":"2025-12-12T02:00:00.000Z","assignee":null,"labels":[{"id":"l04","name":"docs","color":"#0075ca"},{"id":"l08","name":"infra","color":"#5319e7"},{"id":"l09","name":"flaky","color":"#fbca04"}]},{"id":"i095","key":"ING-95","title":"Document the retry budget for large pages","state":"DONE","priority":"MEDIUM","updatedAt":"2025-12-11T06:00:00.000Z","assignee":null,"labels":[{"id":"l02","name":"feature","color":"#0e8a16"},{"id":"l05","name":"performance","color":"#a2eeef"},{"id":"l06","name":"security","color":"#b60205"}]},{"id":"i088","key":"ING-88","title":"Remove schema reload for large pages","state":"DONE","priority":"URGENT","updatedAt":"2025-12-11T12:00:00.000Z","assignee":{"id":"m03","role":"MEMBER","user":{"id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"id":"l01","name":"bug","color":"#d73a4a"},{"id":"l05","name":"performance","color":"#a2eeef"},{"id":"l10","name":"regression","color":"#e99695"}]},{"id":"i081","key":"ING-81","title":"Add the idempotency store for offline clients","state":"DONE","priority":"HIGH","updatedAt":"2025-12-11T14:00:00.000Z","assignee":{"id":"m01","role":"OWNER","user":{"id":"u01","name":"Ada Lovelace","avatarUrl":null}},"labels":[{"id":"l04","name":"docs","color":"#0075ca"}]},{"id":"i073","key":"ING-73","title":"Document policy pushdown for offline clients","state":"DONE","priority":"LOW","updatedAt":"2025-12-11T14:00:00.000Z","assignee":{"id":"m10","role":"MEMBER","user":{"id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"id":"l09","name":"flaky","color":"#fbca04"}]},{"id":"i068","key":"ING-68","title":"Measure keep-alives behind a proxy","state":"DONE","priority":"HIGH","updatedAt":"2025-12-10T16:00:00.000Z","assignee":{"id":"m03","role":"MEMBER","user":{"id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"id":"l04","name":"docs","color":"#0075ca"}]},{"id":"i051","key":"ING-51","title":"Retry the shape registry for offline clients","state":"DONE","priority":"HIGH","updatedAt":"2025-12-10T23:00:00.000Z","assignee":{"id":"m12","role":"GUEST","user":{"id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"id":"l02","name":"feature","color":"#0e8a16"},{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l05","name":"performance","color":"#a2eeef"}]},{"id":"i048","key":"ING-48","title":"Cache schema reload for large pages","state":"DONE","priority":"URGENT","updatedAt":"2025-12-10T20:00:00.000Z","assignee":{"id":"m07","role":"MEMBER","user":{"id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"id":"l03","name":"chore","color":"#cfd3d7"},{"id":"l04","name":"docs","color":"#0075ca"}]}]}}]},"fin":true}

N+1 on the board

Level

Measured: hand-written batching (relations needing batching wired by hand, lower is better)

RESTREST: 0 relations needing batching wired by hand0GraphQLGraphQL: 3 relations needing batching wired by hand3RayfoldRayfold: 0 relations needing batching wired by hand0
REST
none to wire: this endpoint was written for this screen, and it loads what it needs in one pass. The next screen needs another endpoint
GraphQL
3: a DataLoader per relation. The same query and schema without them made 100 calls instead of 3
Rayfold
none: a field loader is handed the whole level, so the slow version does not exist (3 calls, the same as GraphQL once its loaders are written)

Measured on this board: 100 data-source calls with the obvious GraphQL resolvers, 3 once DataLoader is added, 3 on Rayfold with nothing to add.

See the real requests and responses (3)

REST 0 requests

No HTTP request on this stack for this step.

GraphQL 2 requests

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ board(projectId: \"p1\") { project { key name } columns { state count issues(first: 10) { items { id key title state priority updatedAt assignee { id role user { id name avatarUrl } } labels { id name color } } } } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "board": {
      "project": {
        "key": "ING",
        "name": "Ingest pipeline"
      },
      "columns": [
        {
          "state": "TRIAGE",
          "count": 20,
          "issues": {
            "items": [
              {
                "id": "i093",
                "key": "ING-93",
... 1650 more lines
Full response body
{
  "data": {
    "board": {
      "project": {
        "key": "ING",
        "name": "Ingest pipeline"
      },
      "columns": [
        {
          "state": "TRIAGE",
          "count": 20,
          "issues": {
            "items": [
              {
                "id": "i093",
                "key": "ING-93",
                "title": "Retry the retry budget in the Kotlin runtime",
                "state": "TRIAGE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T18:00:00.000Z",
                "assignee": {
                  "id": "m04",
                  "role": "MEMBER",
                  "user": {
                    "id": "u04",
                    "name": "Katherine Johnson",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  }
                ]
              },
              {
                "id": "i086",
                "key": "ING-86",
                "title": "Remove schema reload after a redeploy",
                "state": "TRIAGE",
                "priority": "URGENT",
                "updatedAt": "2025-12-12T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i085",
                "key": "ING-85",
                "title": "Remove schema reload for offline clients",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T01:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i076",
                "key": "ING-76",
                "title": "Fix cold starts on reconnect",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T07:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i075",
                "key": "ING-75",
                "title": "Document the retry budget on reconnect",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T13:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i070",
                "key": "ING-70",
                "title": "Document schema reload for large pages",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m04",
                  "role": "MEMBER",
                  "user": {
                    "id": "u04",
                    "name": "Katherine Johnson",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i052",
                "key": "ING-52",
                "title": "Document cold starts for offline clients",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-10T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i047",
                "key": "ING-47",
                "title": "Fix keep-alives after a redeploy",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T15:00:00.000Z",
                "assignee": {
                  "id": "m11",
                  "role": "MEMBER",
                  "user": {
                    "id": "u11",
                    "name": "Anita Borg",
                    "avatarUrl": "https://avatars.example.com/u11.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i046",
                "key": "ING-46",
                "title": "Retry keep-alives for large pages",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-09T13:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i043",
                "key": "ING-43",
                "title": "Fix the WebSocket transport for large pages",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-09T17:00:00.000Z",
                "assignee": {
                  "id": "m11",
                  "role": "MEMBER",
                  "user": {
                    "id": "u11",
                    "name": "Anita Borg",
                    "avatarUrl": "https://avatars.example.com/u11.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "BACKLOG",
          "count": 15,
          "issues": {
            "items": [
              {
                "id": "i094",
                "key": "ING-94",
                "title": "Retry keep-alives behind a proxy",
                "state": "BACKLOG",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T17:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i092",
                "key": "ING-92",
                "title": "Refactor the WebSocket transport after a redeploy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-12T09:00:00.000Z",
                "assignee": {
                  "id": "m06",
                  "role": "MEMBER",
                  "user": {
                    "id": "u06",
                    "name": "Edsger Dijkstra",
                    "avatarUrl": "https://avatars.example.com/u06.png"
                  }
                },
                "labels": [
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i089",
                "key": "ING-89",
                "title": "Document cold starts for large pages",
                "state": "BACKLOG",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-12T08:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i083",
                "key": "ING-83",
                "title": "Document the retry budget under load",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-11T03:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i079",
                "key": "ING-79",
                "title": "Remove cursor pagination behind a proxy",
                "state": "BACKLOG",
                "priority": "NONE",
                "updatedAt": "2025-12-12T03:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i071",
                "key": "ING-71",
                "title": "Remove the idempotency store behind a proxy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T08:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": []
              },
              {
                "id": "i069",
                "key": "ING-69",
                "title": "Retry the batch planner after a redeploy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T13:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i055",
                "key": "ING-55",
                "title": "Harden the retry budget for offline clients",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-10T08:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i041",
                "key": "ING-41",
                "title": "Investigate the shape registry under load",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-10T10:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i040",
                "key": "ING-40",
                "title": "Document schema reload in the Kotlin runtime",
                "state": "BACKLOG",
                "priority": "URGENT",
                "updatedAt": "2025-12-09T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "TODO",
          "count": 9,
          "issues": {
            "items": [
              {
                "id": "i078",
                "key": "ING-78",
                "title": "Refactor the WebSocket transport on reconnect",
                "state": "TODO",
                "priority": "NONE",
                "updatedAt": "2025-12-10T11:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i077",
                "key": "ING-77",
                "title": "Remove the batch planner for large pages",
                "state": "TODO",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T09:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i066",
                "key": "ING-66",
                "title": "Retry the idempotency store under load",
                "state": "TODO",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T22:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  }
                ]
              },
              {
                "id": "i049",
                "key": "ING-49",
                "title": "Refactor policy pushdown on reconnect",
                "state": "TODO",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T07:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i038",
                "key": "ING-38",
                "title": "Document schema reload on slow networks",
                "state": "TODO",
                "priority": "LOW",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m06",
                  "role": "MEMBER",
                  "user": {
                    "id": "u06",
                    "name": "Edsger Dijkstra",
                    "avatarUrl": "https://avatars.example.com/u06.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i037",
                "key": "ING-37",
                "title": "Remove policy pushdown for large pages",
                "state": "TODO",
                "priority": "LOW",
                "updatedAt": "2025-12-09T15:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i036",
                "key": "ING-36",
                "title": "Fix policy pushdown behind a proxy",
                "state": "TODO",
                "priority": "NONE",
                "updatedAt": "2025-12-10T05:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": []
              },
              {
                "id": "i028",
                "key": "ING-28",
                "title": "Retry the shape registry in the Kotlin runtime",
                "state": "TODO",
                "priority": "URGENT",
                "updatedAt": "2025-12-08T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i025",
                "key": "ING-25",
                "title": "Fix policy pushdown under load",
                "state": "TODO",
                "priority": "NONE",
                "updatedAt": "2025-12-09T15:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "IN_PROGRESS",
          "count": 17,
          "issues": {
            "items": [
              {
                "id": "i100",
                "key": "ING-100",
                "title": "Document the batch planner under load",
                "state": "IN_PROGRESS",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-12T14:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i090",
                "key": "ING-90",
                "title": "Investigate keep-alives on reconnect",
                "state": "IN_PROGRESS",
                "priority": "URGENT",
                "updatedAt": "2025-12-12T00:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i067",
                "key": "ING-67",
                "title": "Harden the batch planner behind a proxy",
                "state": "IN_PROGRESS",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T09:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i065",
                "key": "ING-65",
                "title": "Measure the batch planner on reconnect",
                "state": "IN_PROGRESS",
                "priority": "NONE",
                "updatedAt": "2025-12-10T22:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i064",
                "key": "ING-64",
                "title": "Remove keep-alives in the Kotlin runtime",
                "state": "IN_PROGRESS",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T14:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i061",
                "key": "ING-61",
                "title": "Retry keep-alives on reconnect",
                "state": "IN_PROGRESS",
                "priority": "HIGH",
                "updatedAt": "2025-12-09T22:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i058",
                "key": "ING-58",
                "title": "Refactor the batch planner for large pages",
                "state": "IN_PROGRESS",
                "priority": "LOW",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i050",
                "key": "ING-50",
                "title": "Refactor policy pushdown for large pages",
                "state": "IN_PROGRESS",
                "priority": "HIGH",
                "updatedAt": "2025-12-09T10:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i030",
                "key": "ING-30",
                "title": "Fix cursor pagination for large pages",
                "state": "IN_PROGRESS",
                "priority": "LOW",
                "updatedAt": "2025-12-09T12:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i026",
                "key": "ING-26",
                "title": "Retry keep-alives on reconnect",
                "state": "IN_PROGRESS",
                "priority": "NONE",
                "updatedAt": "2025-12-09T00:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "IN_REVIEW",
          "count": 9,
          "issues": {
            "items": [
              {
                "id": "i091",
                "key": "ING-91",
                "title": "Refactor the retry budget after a redeploy",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-12T04:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i087",
                "key": "ING-87",
                "title": "Measure the WebSocket transport for offline clients",
                "state": "IN_REVIEW",
                "priority": "NONE",
                "updatedAt": "2025-12-11T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i082",
                "key": "ING-82",
                "title": "Retry the WebSocket transport in the Kotlin runtime",
                "state": "IN_REVIEW",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T19:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i072",
                "key": "ING-72",
                "title": "Investigate policy pushdown for offline clients",
                "state": "IN_REVIEW",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T20:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i063",
                "key": "ING-63",
                "title": "Retry the batch planner for large pages",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-10T07:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i060",
                "key": "ING-60",
                "title": "Measure cold starts under load",
                "state": "IN_REVIEW",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T01:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i054",
                "key": "ING-54",
                "title": "Measure the idempotency store in the Kotlin runtime",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-10T23:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i016",
                "key": "ING-16",
                "title": "Measure the shape registry on slow networks",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-08T07:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  }
                ]
              },
              {
                "id": "i010",
                "key": "ING-10",
                "title": "Refactor cursor pagination on reconnect",
                "state": "IN_REVIEW",
                "priority": "URGENT",
                "updatedAt": "2025-12-07T16:00:00.000Z",
                "assignee": {
                  "id": "m05",
                  "role": "MEMBER",
                  "user": {
                    "id": "u05",
                    "name": "Barbara Liskov",
                    "avatarUrl": "https://avatars.example.com/u05.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "DONE",
          "count": 15,
          "issues": {
            "items": [
              {
                "id": "i098",
                "key": "ING-98",
                "title": "Investigate policy pushdown behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T22:00:00.000Z",
                "assignee": null,
                "labels": []
              },
              {
                "id": "i097",
                "key": "ING-97",
                "title": "Refactor the idempotency store on slow networks",
                "state": "DONE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T07:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i096",
                "key": "ING-96",
                "title": "Add cursor pagination behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-12T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i095",
                "key": "ING-95",
                "title": "Document the retry budget for large pages",
                "state": "DONE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T06:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i088",
                "key": "ING-88",
                "title": "Remove schema reload for large pages",
                "state": "DONE",
                "priority": "URGENT",
                "updatedAt": "2025-12-11T12:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i081",
                "key": "ING-81",
                "title": "Add the idempotency store for offline clients",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T14:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i073",
                "key": "ING-73",
                "title": "Document policy pushdown for offline clients",
                "state": "DONE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T14:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i068",
                "key": "ING-68",
                "title": "Measure keep-alives behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T16:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i051",
                "key": "ING-51",
                "title": "Retry the shape registry for offline clients",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T23:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i048",
                "key": "ING-48",
                "title": "Cache schema reload for large pages",
                "state": "DONE",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T20:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              }
            ]
          }
        }
      ]
    }
  }
}
POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ board(projectId: \"p1\") { project { key name } columns { state count issues(first: 10) { items { id key title state priority updatedAt assignee { id role user { id name avatarUrl } } labels { id name color } } } } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "board": {
      "project": {
        "key": "ING",
        "name": "Ingest pipeline"
      },
      "columns": [
        {
          "state": "TRIAGE",
          "count": 20,
          "issues": {
            "items": [
              {
                "id": "i093",
                "key": "ING-93",
... 1650 more lines
Full response body
{
  "data": {
    "board": {
      "project": {
        "key": "ING",
        "name": "Ingest pipeline"
      },
      "columns": [
        {
          "state": "TRIAGE",
          "count": 20,
          "issues": {
            "items": [
              {
                "id": "i093",
                "key": "ING-93",
                "title": "Retry the retry budget in the Kotlin runtime",
                "state": "TRIAGE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T18:00:00.000Z",
                "assignee": {
                  "id": "m04",
                  "role": "MEMBER",
                  "user": {
                    "id": "u04",
                    "name": "Katherine Johnson",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  }
                ]
              },
              {
                "id": "i086",
                "key": "ING-86",
                "title": "Remove schema reload after a redeploy",
                "state": "TRIAGE",
                "priority": "URGENT",
                "updatedAt": "2025-12-12T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i085",
                "key": "ING-85",
                "title": "Remove schema reload for offline clients",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T01:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i076",
                "key": "ING-76",
                "title": "Fix cold starts on reconnect",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T07:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i075",
                "key": "ING-75",
                "title": "Document the retry budget on reconnect",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T13:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i070",
                "key": "ING-70",
                "title": "Document schema reload for large pages",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m04",
                  "role": "MEMBER",
                  "user": {
                    "id": "u04",
                    "name": "Katherine Johnson",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i052",
                "key": "ING-52",
                "title": "Document cold starts for offline clients",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-10T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i047",
                "key": "ING-47",
                "title": "Fix keep-alives after a redeploy",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T15:00:00.000Z",
                "assignee": {
                  "id": "m11",
                  "role": "MEMBER",
                  "user": {
                    "id": "u11",
                    "name": "Anita Borg",
                    "avatarUrl": "https://avatars.example.com/u11.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i046",
                "key": "ING-46",
                "title": "Retry keep-alives for large pages",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-09T13:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i043",
                "key": "ING-43",
                "title": "Fix the WebSocket transport for large pages",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-09T17:00:00.000Z",
                "assignee": {
                  "id": "m11",
                  "role": "MEMBER",
                  "user": {
                    "id": "u11",
                    "name": "Anita Borg",
                    "avatarUrl": "https://avatars.example.com/u11.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "BACKLOG",
          "count": 15,
          "issues": {
            "items": [
              {
                "id": "i094",
                "key": "ING-94",
                "title": "Retry keep-alives behind a proxy",
                "state": "BACKLOG",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T17:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i092",
                "key": "ING-92",
                "title": "Refactor the WebSocket transport after a redeploy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-12T09:00:00.000Z",
                "assignee": {
                  "id": "m06",
                  "role": "MEMBER",
                  "user": {
                    "id": "u06",
                    "name": "Edsger Dijkstra",
                    "avatarUrl": "https://avatars.example.com/u06.png"
                  }
                },
                "labels": [
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i089",
                "key": "ING-89",
                "title": "Document cold starts for large pages",
                "state": "BACKLOG",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-12T08:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i083",
                "key": "ING-83",
                "title": "Document the retry budget under load",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-11T03:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i079",
                "key": "ING-79",
                "title": "Remove cursor pagination behind a proxy",
                "state": "BACKLOG",
                "priority": "NONE",
                "updatedAt": "2025-12-12T03:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i071",
                "key": "ING-71",
                "title": "Remove the idempotency store behind a proxy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T08:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": []
              },
              {
                "id": "i069",
                "key": "ING-69",
                "title": "Retry the batch planner after a redeploy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T13:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i055",
                "key": "ING-55",
                "title": "Harden the retry budget for offline clients",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-10T08:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i041",
                "key": "ING-41",
                "title": "Investigate the shape registry under load",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-10T10:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i040",
                "key": "ING-40",
                "title": "Document schema reload in the Kotlin runtime",
                "state": "BACKLOG",
                "priority": "URGENT",
                "updatedAt": "2025-12-09T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "TODO",
          "count": 9,
          "issues": {
            "items": [
              {
                "id": "i078",
                "key": "ING-78",
                "title": "Refactor the WebSocket transport on reconnect",
                "state": "TODO",
                "priority": "NONE",
                "updatedAt": "2025-12-10T11:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i077",
                "key": "ING-77",
                "title": "Remove the batch planner for large pages",
                "state": "TODO",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T09:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i066",
                "key": "ING-66",
                "title": "Retry the idempotency store under load",
                "state": "TODO",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T22:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  }
                ]
              },
              {
                "id": "i049",
                "key": "ING-49",
                "title": "Refactor policy pushdown on reconnect",
                "state": "TODO",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T07:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i038",
                "key": "ING-38",
                "title": "Document schema reload on slow networks",
                "state": "TODO",
                "priority": "LOW",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m06",
                  "role": "MEMBER",
                  "user": {
                    "id": "u06",
                    "name": "Edsger Dijkstra",
                    "avatarUrl": "https://avatars.example.com/u06.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i037",
                "key": "ING-37",
                "title": "Remove policy pushdown for large pages",
                "state": "TODO",
                "priority": "LOW",
                "updatedAt": "2025-12-09T15:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i036",
                "key": "ING-36",
                "title": "Fix policy pushdown behind a proxy",
                "state": "TODO",
                "priority": "NONE",
                "updatedAt": "2025-12-10T05:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": []
              },
              {
                "id": "i028",
                "key": "ING-28",
                "title": "Retry the shape registry in the Kotlin runtime",
                "state": "TODO",
                "priority": "URGENT",
                "updatedAt": "2025-12-08T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i025",
                "key": "ING-25",
                "title": "Fix policy pushdown under load",
                "state": "TODO",
                "priority": "NONE",
                "updatedAt": "2025-12-09T15:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "IN_PROGRESS",
          "count": 17,
          "issues": {
            "items": [
              {
                "id": "i100",
                "key": "ING-100",
                "title": "Document the batch planner under load",
                "state": "IN_PROGRESS",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-12T14:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i090",
                "key": "ING-90",
                "title": "Investigate keep-alives on reconnect",
                "state": "IN_PROGRESS",
                "priority": "URGENT",
                "updatedAt": "2025-12-12T00:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i067",
                "key": "ING-67",
                "title": "Harden the batch planner behind a proxy",
                "state": "IN_PROGRESS",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T09:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i065",
                "key": "ING-65",
                "title": "Measure the batch planner on reconnect",
                "state": "IN_PROGRESS",
                "priority": "NONE",
                "updatedAt": "2025-12-10T22:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i064",
                "key": "ING-64",
                "title": "Remove keep-alives in the Kotlin runtime",
                "state": "IN_PROGRESS",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T14:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i061",
                "key": "ING-61",
                "title": "Retry keep-alives on reconnect",
                "state": "IN_PROGRESS",
                "priority": "HIGH",
                "updatedAt": "2025-12-09T22:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i058",
                "key": "ING-58",
                "title": "Refactor the batch planner for large pages",
                "state": "IN_PROGRESS",
                "priority": "LOW",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i050",
                "key": "ING-50",
                "title": "Refactor policy pushdown for large pages",
                "state": "IN_PROGRESS",
                "priority": "HIGH",
                "updatedAt": "2025-12-09T10:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i030",
                "key": "ING-30",
                "title": "Fix cursor pagination for large pages",
                "state": "IN_PROGRESS",
                "priority": "LOW",
                "updatedAt": "2025-12-09T12:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i026",
                "key": "ING-26",
                "title": "Retry keep-alives on reconnect",
                "state": "IN_PROGRESS",
                "priority": "NONE",
                "updatedAt": "2025-12-09T00:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "IN_REVIEW",
          "count": 9,
          "issues": {
            "items": [
              {
                "id": "i091",
                "key": "ING-91",
                "title": "Refactor the retry budget after a redeploy",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-12T04:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i087",
                "key": "ING-87",
                "title": "Measure the WebSocket transport for offline clients",
                "state": "IN_REVIEW",
                "priority": "NONE",
                "updatedAt": "2025-12-11T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i082",
                "key": "ING-82",
                "title": "Retry the WebSocket transport in the Kotlin runtime",
                "state": "IN_REVIEW",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T19:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i072",
                "key": "ING-72",
                "title": "Investigate policy pushdown for offline clients",
                "state": "IN_REVIEW",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T20:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i063",
                "key": "ING-63",
                "title": "Retry the batch planner for large pages",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-10T07:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i060",
                "key": "ING-60",
                "title": "Measure cold starts under load",
                "state": "IN_REVIEW",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T01:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i054",
                "key": "ING-54",
                "title": "Measure the idempotency store in the Kotlin runtime",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-10T23:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i016",
                "key": "ING-16",
                "title": "Measure the shape registry on slow networks",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-08T07:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  }
                ]
              },
              {
                "id": "i010",
                "key": "ING-10",
                "title": "Refactor cursor pagination on reconnect",
                "state": "IN_REVIEW",
                "priority": "URGENT",
                "updatedAt": "2025-12-07T16:00:00.000Z",
                "assignee": {
                  "id": "m05",
                  "role": "MEMBER",
                  "user": {
                    "id": "u05",
                    "name": "Barbara Liskov",
                    "avatarUrl": "https://avatars.example.com/u05.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "DONE",
          "count": 15,
          "issues": {
            "items": [
              {
                "id": "i098",
                "key": "ING-98",
                "title": "Investigate policy pushdown behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T22:00:00.000Z",
                "assignee": null,
                "labels": []
              },
              {
                "id": "i097",
                "key": "ING-97",
                "title": "Refactor the idempotency store on slow networks",
                "state": "DONE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T07:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i096",
                "key": "ING-96",
                "title": "Add cursor pagination behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-12T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i095",
                "key": "ING-95",
                "title": "Document the retry budget for large pages",
                "state": "DONE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T06:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i088",
                "key": "ING-88",
                "title": "Remove schema reload for large pages",
                "state": "DONE",
                "priority": "URGENT",
                "updatedAt": "2025-12-11T12:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i081",
                "key": "ING-81",
                "title": "Add the idempotency store for offline clients",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T14:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i073",
                "key": "ING-73",
                "title": "Document policy pushdown for offline clients",
                "state": "DONE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T14:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i068",
                "key": "ING-68",
                "title": "Measure keep-alives behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T16:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i051",
                "key": "ING-51",
                "title": "Retry the shape registry for offline clients",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T23:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i048",
                "key": "ING-48",
                "title": "Cache schema reload for large pages",
                "state": "DONE",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T20:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              }
            ]
          }
        }
      ]
    }
  }
}

Rayfold 1 request

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "board",
      "args": {
        "projectId": "p1"
      },
      "shape": "{ project { key name } columns { state count issues(page: { first: 10 }) { items { ...Issue.row } } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "project": {
      "$type": "Project",
      "key": "ING",
      "name": "Ingest pipeline"
    },
    "columns": [
      {
        "state": "TRIAGE",
        "count": 20,
        "issues": {
          "items": [
            {
              "$type": "Issue",
... 1925 more lines
Full response body
{
  "id": 1,
  "data": {
    "project": {
      "$type": "Project",
      "key": "ING",
      "name": "Ingest pipeline"
    },
    "columns": [
      {
        "state": "TRIAGE",
        "count": 20,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i093",
              "key": "ING-93",
              "title": "Retry the retry budget in the Kotlin runtime",
              "state": "TRIAGE",
              "priority": "LOW",
              "updatedAt": "2025-12-11T18:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m04",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u04",
                  "name": "Katherine Johnson",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i086",
              "key": "ING-86",
              "title": "Remove schema reload after a redeploy",
              "state": "TRIAGE",
              "priority": "URGENT",
              "updatedAt": "2025-12-12T02:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i085",
              "key": "ING-85",
              "title": "Remove schema reload for offline clients",
              "state": "TRIAGE",
              "priority": "NONE",
              "updatedAt": "2025-12-11T01:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i076",
              "key": "ING-76",
              "title": "Fix cold starts on reconnect",
              "state": "TRIAGE",
              "priority": "NONE",
              "updatedAt": "2025-12-11T07:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m07",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u07",
                  "name": "Radia Perlman",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i075",
              "key": "ING-75",
              "title": "Document the retry budget on reconnect",
              "state": "TRIAGE",
              "priority": "NONE",
              "updatedAt": "2025-12-11T13:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m10",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u10",
                  "name": "Vint Cerf",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i070",
              "key": "ING-70",
              "title": "Document schema reload for large pages",
              "state": "TRIAGE",
              "priority": "NONE",
              "updatedAt": "2025-12-10T06:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m04",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u04",
                  "name": "Katherine Johnson",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i052",
              "key": "ING-52",
              "title": "Document cold starts for offline clients",
              "state": "TRIAGE",
              "priority": "NONE",
              "updatedAt": "2025-12-10T16:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i047",
              "key": "ING-47",
              "title": "Fix keep-alives after a redeploy",
              "state": "TRIAGE",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-10T15:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m11",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u11",
                  "name": "Anita Borg",
                  "avatarUrl": "https://avatars.example.com/u11.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i046",
              "key": "ING-46",
              "title": "Retry keep-alives for large pages",
              "state": "TRIAGE",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-09T13:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m09",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u09",
                  "name": "Margaret Hamilton",
                  "avatarUrl": "https://avatars.example.com/u09.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i043",
              "key": "ING-43",
              "title": "Fix the WebSocket transport for large pages",
              "state": "TRIAGE",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-09T17:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m11",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u11",
                  "name": "Anita Borg",
                  "avatarUrl": "https://avatars.example.com/u11.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            }
          ]
        }
      },
      {
        "state": "BACKLOG",
        "count": 15,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i094",
              "key": "ING-94",
              "title": "Retry keep-alives behind a proxy",
              "state": "BACKLOG",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-11T17:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m03",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u03",
                  "name": "Alan Turing",
                  "avatarUrl": "https://avatars.example.com/u03.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i092",
              "key": "ING-92",
              "title": "Refactor the WebSocket transport after a redeploy",
              "state": "BACKLOG",
              "priority": "HIGH",
              "updatedAt": "2025-12-12T09:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m06",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u06",
                  "name": "Edsger Dijkstra",
                  "avatarUrl": "https://avatars.example.com/u06.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i089",
              "key": "ING-89",
              "title": "Document cold starts for large pages",
              "state": "BACKLOG",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-12T08:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i083",
              "key": "ING-83",
              "title": "Document the retry budget under load",
              "state": "BACKLOG",
              "priority": "LOW",
              "updatedAt": "2025-12-11T03:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i079",
              "key": "ING-79",
              "title": "Remove cursor pagination behind a proxy",
              "state": "BACKLOG",
              "priority": "NONE",
              "updatedAt": "2025-12-12T03:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i071",
              "key": "ING-71",
              "title": "Remove the idempotency store behind a proxy",
              "state": "BACKLOG",
              "priority": "HIGH",
              "updatedAt": "2025-12-10T08:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": []
            },
            {
              "$type": "Issue",
              "id": "i069",
              "key": "ING-69",
              "title": "Retry the batch planner after a redeploy",
              "state": "BACKLOG",
              "priority": "HIGH",
              "updatedAt": "2025-12-11T13:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i055",
              "key": "ING-55",
              "title": "Harden the retry budget for offline clients",
              "state": "BACKLOG",
              "priority": "LOW",
              "updatedAt": "2025-12-10T08:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i041",
              "key": "ING-41",
              "title": "Investigate the shape registry under load",
              "state": "BACKLOG",
              "priority": "LOW",
              "updatedAt": "2025-12-10T10:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i040",
              "key": "ING-40",
              "title": "Document schema reload in the Kotlin runtime",
              "state": "BACKLOG",
              "priority": "URGENT",
              "updatedAt": "2025-12-09T16:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            }
          ]
        }
      },
      {
        "state": "TODO",
        "count": 9,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i078",
              "key": "ING-78",
              "title": "Refactor the WebSocket transport on reconnect",
              "state": "TODO",
              "priority": "NONE",
              "updatedAt": "2025-12-10T11:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m02",
                "role": "ADMIN",
                "user": {
                  "$type": "User",
                  "id": "u02",
                  "name": "Grace Hopper",
                  "avatarUrl": "https://avatars.example.com/u02.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i077",
              "key": "ING-77",
              "title": "Remove the batch planner for large pages",
              "state": "TODO",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-11T09:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i066",
              "key": "ING-66",
              "title": "Retry the idempotency store under load",
              "state": "TODO",
              "priority": "HIGH",
              "updatedAt": "2025-12-10T22:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m09",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u09",
                  "name": "Margaret Hamilton",
                  "avatarUrl": "https://avatars.example.com/u09.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i049",
              "key": "ING-49",
              "title": "Refactor policy pushdown on reconnect",
              "state": "TODO",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-10T07:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i038",
              "key": "ING-38",
              "title": "Document schema reload on slow networks",
              "state": "TODO",
              "priority": "LOW",
              "updatedAt": "2025-12-10T06:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m06",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u06",
                  "name": "Edsger Dijkstra",
                  "avatarUrl": "https://avatars.example.com/u06.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i037",
              "key": "ING-37",
              "title": "Remove policy pushdown for large pages",
              "state": "TODO",
              "priority": "LOW",
              "updatedAt": "2025-12-09T15:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m10",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u10",
                  "name": "Vint Cerf",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i036",
              "key": "ING-36",
              "title": "Fix policy pushdown behind a proxy",
              "state": "TODO",
              "priority": "NONE",
              "updatedAt": "2025-12-10T05:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m09",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u09",
                  "name": "Margaret Hamilton",
                  "avatarUrl": "https://avatars.example.com/u09.png"
                }
              },
              "labels": []
            },
            {
              "$type": "Issue",
              "id": "i028",
              "key": "ING-28",
              "title": "Retry the shape registry in the Kotlin runtime",
              "state": "TODO",
              "priority": "URGENT",
              "updatedAt": "2025-12-08T16:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i025",
              "key": "ING-25",
              "title": "Fix policy pushdown under load",
              "state": "TODO",
              "priority": "NONE",
              "updatedAt": "2025-12-09T15:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            }
          ]
        }
      },
      {
        "state": "IN_PROGRESS",
        "count": 17,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i100",
              "key": "ING-100",
              "title": "Document the batch planner under load",
              "state": "IN_PROGRESS",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-12T14:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m03",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u03",
                  "name": "Alan Turing",
                  "avatarUrl": "https://avatars.example.com/u03.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i090",
              "key": "ING-90",
              "title": "Investigate keep-alives on reconnect",
              "state": "IN_PROGRESS",
              "priority": "URGENT",
              "updatedAt": "2025-12-12T00:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i067",
              "key": "ING-67",
              "title": "Harden the batch planner behind a proxy",
              "state": "IN_PROGRESS",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-10T09:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i065",
              "key": "ING-65",
              "title": "Measure the batch planner on reconnect",
              "state": "IN_PROGRESS",
              "priority": "NONE",
              "updatedAt": "2025-12-10T22:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m01",
                "role": "OWNER",
                "user": {
                  "$type": "User",
                  "id": "u01",
                  "name": "Ada Lovelace",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i064",
              "key": "ING-64",
              "title": "Remove keep-alives in the Kotlin runtime",
              "state": "IN_PROGRESS",
              "priority": "URGENT",
              "updatedAt": "2025-12-10T14:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i061",
              "key": "ING-61",
              "title": "Retry keep-alives on reconnect",
              "state": "IN_PROGRESS",
              "priority": "HIGH",
              "updatedAt": "2025-12-09T22:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i058",
              "key": "ING-58",
              "title": "Refactor the batch planner for large pages",
              "state": "IN_PROGRESS",
              "priority": "LOW",
              "updatedAt": "2025-12-10T06:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m07",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u07",
                  "name": "Radia Perlman",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i050",
              "key": "ING-50",
              "title": "Refactor policy pushdown for large pages",
              "state": "IN_PROGRESS",
              "priority": "HIGH",
              "updatedAt": "2025-12-09T10:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m02",
                "role": "ADMIN",
                "user": {
                  "$type": "User",
                  "id": "u02",
                  "name": "Grace Hopper",
                  "avatarUrl": "https://avatars.example.com/u02.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i030",
              "key": "ING-30",
              "title": "Fix cursor pagination for large pages",
              "state": "IN_PROGRESS",
              "priority": "LOW",
              "updatedAt": "2025-12-09T12:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m02",
                "role": "ADMIN",
                "user": {
                  "$type": "User",
                  "id": "u02",
                  "name": "Grace Hopper",
                  "avatarUrl": "https://avatars.example.com/u02.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i026",
              "key": "ING-26",
              "title": "Retry keep-alives on reconnect",
              "state": "IN_PROGRESS",
              "priority": "NONE",
              "updatedAt": "2025-12-09T00:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m03",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u03",
                  "name": "Alan Turing",
                  "avatarUrl": "https://avatars.example.com/u03.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            }
          ]
        }
      },
      {
        "state": "IN_REVIEW",
        "count": 9,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i091",
              "key": "ING-91",
              "title": "Refactor the retry budget after a redeploy",
              "state": "IN_REVIEW",
              "priority": "LOW",
              "updatedAt": "2025-12-12T04:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i087",
              "key": "ING-87",
              "title": "Measure the WebSocket transport for offline clients",
              "state": "IN_REVIEW",
              "priority": "NONE",
              "updatedAt": "2025-12-11T02:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i082",
              "key": "ING-82",
              "title": "Retry the WebSocket transport in the Kotlin runtime",
              "state": "IN_REVIEW",
              "priority": "HIGH",
              "updatedAt": "2025-12-10T19:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m07",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u07",
                  "name": "Radia Perlman",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i072",
              "key": "ING-72",
              "title": "Investigate policy pushdown for offline clients",
              "state": "IN_REVIEW",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-10T20:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m10",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u10",
                  "name": "Vint Cerf",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i063",
              "key": "ING-63",
              "title": "Retry the batch planner for large pages",
              "state": "IN_REVIEW",
              "priority": "LOW",
              "updatedAt": "2025-12-10T07:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i060",
              "key": "ING-60",
              "title": "Measure cold starts under load",
              "state": "IN_REVIEW",
              "priority": "URGENT",
              "updatedAt": "2025-12-10T01:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m01",
                "role": "OWNER",
                "user": {
                  "$type": "User",
                  "id": "u01",
                  "name": "Ada Lovelace",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i054",
              "key": "ING-54",
              "title": "Measure the idempotency store in the Kotlin runtime",
              "state": "IN_REVIEW",
              "priority": "LOW",
              "updatedAt": "2025-12-10T23:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m08",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u08",
                  "name": "Tim Berners-Lee",
                  "avatarUrl": "https://avatars.example.com/u08.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l07",
                  "name": "ux",
                  "color": "#d4c5f9"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i016",
              "key": "ING-16",
              "title": "Measure the shape registry on slow networks",
              "state": "IN_REVIEW",
              "priority": "LOW",
              "updatedAt": "2025-12-08T07:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m10",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u10",
                  "name": "Vint Cerf",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i010",
              "key": "ING-10",
              "title": "Refactor cursor pagination on reconnect",
              "state": "IN_REVIEW",
              "priority": "URGENT",
              "updatedAt": "2025-12-07T16:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m05",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u05",
                  "name": "Barbara Liskov",
                  "avatarUrl": "https://avatars.example.com/u05.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                }
              ]
            }
          ]
        }
      },
      {
        "state": "DONE",
        "count": 15,
        "issues": {
          "items": [
            {
              "$type": "Issue",
              "id": "i098",
              "key": "ING-98",
              "title": "Investigate policy pushdown behind a proxy",
              "state": "DONE",
              "priority": "HIGH",
              "updatedAt": "2025-12-11T22:00:00.000Z",
              "assignee": null,
              "labels": []
            },
            {
              "$type": "Issue",
              "id": "i097",
              "key": "ING-97",
              "title": "Refactor the idempotency store on slow networks",
              "state": "DONE",
              "priority": "LOW",
              "updatedAt": "2025-12-11T07:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m07",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u07",
                  "name": "Radia Perlman",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i096",
              "key": "ING-96",
              "title": "Add cursor pagination behind a proxy",
              "state": "DONE",
              "priority": "HIGH",
              "updatedAt": "2025-12-12T02:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                },
                {
                  "$type": "Label",
                  "id": "l08",
                  "name": "infra",
                  "color": "#5319e7"
                },
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i095",
              "key": "ING-95",
              "title": "Document the retry budget for large pages",
              "state": "DONE",
              "priority": "MEDIUM",
              "updatedAt": "2025-12-11T06:00:00.000Z",
              "assignee": null,
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l06",
                  "name": "security",
                  "color": "#b60205"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i088",
              "key": "ING-88",
              "title": "Remove schema reload for large pages",
              "state": "DONE",
              "priority": "URGENT",
              "updatedAt": "2025-12-11T12:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m03",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u03",
                  "name": "Alan Turing",
                  "avatarUrl": "https://avatars.example.com/u03.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l01",
                  "name": "bug",
                  "color": "#d73a4a"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                },
                {
                  "$type": "Label",
                  "id": "l10",
                  "name": "regression",
                  "color": "#e99695"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i081",
              "key": "ING-81",
              "title": "Add the idempotency store for offline clients",
              "state": "DONE",
              "priority": "HIGH",
              "updatedAt": "2025-12-11T14:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m01",
                "role": "OWNER",
                "user": {
                  "$type": "User",
                  "id": "u01",
                  "name": "Ada Lovelace",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i073",
              "key": "ING-73",
              "title": "Document policy pushdown for offline clients",
              "state": "DONE",
              "priority": "LOW",
              "updatedAt": "2025-12-11T14:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m10",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u10",
                  "name": "Vint Cerf",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l09",
                  "name": "flaky",
                  "color": "#fbca04"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i068",
              "key": "ING-68",
              "title": "Measure keep-alives behind a proxy",
              "state": "DONE",
              "priority": "HIGH",
              "updatedAt": "2025-12-10T16:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m03",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u03",
                  "name": "Alan Turing",
                  "avatarUrl": "https://avatars.example.com/u03.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i051",
              "key": "ING-51",
              "title": "Retry the shape registry for offline clients",
              "state": "DONE",
              "priority": "HIGH",
              "updatedAt": "2025-12-10T23:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m12",
                "role": "GUEST",
                "user": {
                  "$type": "User",
                  "id": "u12",
                  "name": "Leslie Lamport",
                  "avatarUrl": "https://avatars.example.com/u12.png"
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l02",
                  "name": "feature",
                  "color": "#0e8a16"
                },
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l05",
                  "name": "performance",
                  "color": "#a2eeef"
                }
              ]
            },
            {
              "$type": "Issue",
              "id": "i048",
              "key": "ING-48",
              "title": "Cache schema reload for large pages",
              "state": "DONE",
              "priority": "URGENT",
              "updatedAt": "2025-12-10T20:00:00.000Z",
              "assignee": {
                "$type": "Member",
                "id": "m07",
                "role": "MEMBER",
                "user": {
                  "$type": "User",
                  "id": "u07",
                  "name": "Radia Perlman",
                  "avatarUrl": null
                }
              },
              "labels": [
                {
                  "$type": "Label",
                  "id": "l03",
                  "name": "chore",
                  "color": "#cfd3d7"
                },
                {
                  "$type": "Label",
                  "id": "l04",
                  "name": "docs",
                  "color": "#0075ca"
                }
              ]
            }
          ]
        }
      }
    ]
  },
  "meta": {
    "cost": 49
  },
  "fin": true
}

One issue with everything on its page

Level

Measured: round trips for one issue page (network round trips, lower is better)

RESTREST: 5 network round trips5GraphQLGraphQL: 1 network round trips1RayfoldRayfold: 1 network round trips1
REST
5: the issue, its comments, its sub-issues, its project, and a batch call for the two people on it
GraphQL
1: one query names the whole tree
Rayfold
1: one op, with the shared view `Issue.card` plus what this page adds

Bytes: REST 2,722, GraphQL 1,335, Rayfold 2,187.

See the real requests and responses (7)

REST 5 requests

GET /issues/i002
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "1"

{
  "id": "i002",
  "key": "ING-2",
  "title": "Document the batch planner on reconnect",
  "description": "Fix the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "IN_PROGRESS",
  "priority": "URGENT",
  "estimate": 1,
  "createdAt": "2025-12-07T07:00:00.000Z",
  "updatedAt": "2025-12-08T08:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": "s02",
  "reporterId": "m12",
  "assigneeId": "m08",
  "labelIds": [
... 35 more lines
Full response body
{
  "id": "i002",
  "key": "ING-2",
  "title": "Document the batch planner on reconnect",
  "description": "Fix the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "IN_PROGRESS",
  "priority": "URGENT",
  "estimate": 1,
  "createdAt": "2025-12-07T07:00:00.000Z",
  "updatedAt": "2025-12-08T08:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": "s02",
  "reporterId": "m12",
  "assigneeId": "m08",
  "labelIds": [
    "l01",
    "l02",
    "l04"
  ],
  "parentId": null,
  "attachments": [],
  "externalState": null,
  "assignee": {
    "id": "m08",
    "role": "MEMBER",
    "user": {
      "id": "u08",
      "name": "Tim Berners-Lee",
      "avatarUrl": "https://avatars.example.com/u08.png",
      "email": "tim.berners.lee@acme.example"
    }
  },
  "labels": [
    {
      "id": "l01",
      "name": "bug",
      "color": "#d73a4a"
    },
    {
      "id": "l02",
      "name": "feature",
      "color": "#0e8a16"
    },
    {
      "id": "l04",
      "name": "docs",
      "color": "#0075ca"
    }
  ]
}
GET /issues/i002/comments?limit=10
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "e3c4e4fe5a9b56a2"

{
  "items": [
    {
      "id": "c0001",
      "body": "Reproduced on the staging cluster.",
      "createdAt": "2025-12-08T08:00:00.000Z",
      "version": 1,
      "issueId": "i002",
      "authorId": "m06",
      "author": {
        "id": "m06",
        "role": "MEMBER",
        "user": {
          "id": "u06",
          "name": "Edsger Dijkstra",
          "avatarUrl": "https://avatars.example.com/u06.png",
... 45 more lines
Full response body
{
  "items": [
    {
      "id": "c0001",
      "body": "Reproduced on the staging cluster.",
      "createdAt": "2025-12-08T08:00:00.000Z",
      "version": 1,
      "issueId": "i002",
      "authorId": "m06",
      "author": {
        "id": "m06",
        "role": "MEMBER",
        "user": {
          "id": "u06",
          "name": "Edsger Dijkstra",
          "avatarUrl": "https://avatars.example.com/u06.png",
          "email": "edsger.dijkstra@acme.example"
        }
      }
    },
    {
      "id": "c0002",
      "body": "This is the same root cause as the retry storm last month.",
      "createdAt": "2025-12-08T08:15:00.000Z",
      "version": 1,
      "issueId": "i002",
      "authorId": "m08",
      "author": {
        "id": "m08",
        "role": "MEMBER",
        "user": {
          "id": "u08",
          "name": "Tim Berners-Lee",
          "avatarUrl": "https://avatars.example.com/u08.png",
          "email": "tim.berners.lee@acme.example"
        }
      }
    },
    {
      "id": "c0003",
      "body": "Shipped behind a flag; watching the error rate.",
      "createdAt": "2025-12-08T08:30:00.000Z",
      "version": 1,
      "issueId": "i002",
      "authorId": "m12",
      "author": {
        "id": "m12",
        "role": "GUEST",
        "user": {
          "id": "u12",
          "name": "Leslie Lamport",
          "avatarUrl": "https://avatars.example.com/u12.png",
          "email": "leslie.lamport@acme.example"
        }
      }
    }
  ],
  "cursor": "c0003",
  "hasMore": false,
  "total": 3
}
3 more requests
GET /issues/i002/children?limit=5
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "557c22d4c0bd16ff"

{
  "items": [],
  "cursor": null,
  "hasMore": false,
  "total": 0
}
GET /projects/p1
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "63fcf7dac20fd80f"

{
  "id": "p1",
  "key": "ING",
  "name": "Ingest pipeline",
  "status": "ACTIVE",
  "startDate": "2026-01-05",
  "targetDate": "2026-03-15",
  "teamId": "t1",
  "leadId": "m01"
}
GET /members?ids=m08,m12
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "78aac18c52f7df9f"

{
  "items": [
    {
      "id": "m08",
      "role": "MEMBER",
      "user": {
        "id": "u08",
        "name": "Tim Berners-Lee",
        "avatarUrl": "https://avatars.example.com/u08.png",
        "email": "tim.berners.lee@acme.example"
      }
    },
    {
      "id": "m12",
      "role": "GUEST",
      "user": {
... 8 more lines
Full response body
{
  "items": [
    {
      "id": "m08",
      "role": "MEMBER",
      "user": {
        "id": "u08",
        "name": "Tim Berners-Lee",
        "avatarUrl": "https://avatars.example.com/u08.png",
        "email": "tim.berners.lee@acme.example"
      }
    },
    {
      "id": "m12",
      "role": "GUEST",
      "user": {
        "id": "u12",
        "name": "Leslie Lamport",
        "avatarUrl": "https://avatars.example.com/u12.png",
        "email": "leslie.lamport@acme.example"
      }
    }
  ]
}

GraphQL 1 request

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ issue(id: \"i002\") { key title state priority estimate version project { key name } sprint { name state } assignee { user { name } } reporter { user { name } } labels { name color } attachments { filename size } children(first: 5) { total items { key state } } comments(first: 10) { total items { body createdAt author { user { name } } } } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "issue": {
      "key": "ING-2",
      "title": "Document the batch planner on reconnect",
      "state": "IN_PROGRESS",
      "priority": "URGENT",
      "estimate": 1,
      "version": 1,
      "project": {
        "key": "ING",
        "name": "Ingest pipeline"
      },
      "sprint": {
        "name": "ING Sprint 2",
        "state": "ACTIVE"
... 65 more lines
Full response body
{
  "data": {
    "issue": {
      "key": "ING-2",
      "title": "Document the batch planner on reconnect",
      "state": "IN_PROGRESS",
      "priority": "URGENT",
      "estimate": 1,
      "version": 1,
      "project": {
        "key": "ING",
        "name": "Ingest pipeline"
      },
      "sprint": {
        "name": "ING Sprint 2",
        "state": "ACTIVE"
      },
      "assignee": {
        "user": {
          "name": "Tim Berners-Lee"
        }
      },
      "reporter": {
        "user": {
          "name": "Leslie Lamport"
        }
      },
      "labels": [
        {
          "name": "bug",
          "color": "#d73a4a"
        },
        {
          "name": "feature",
          "color": "#0e8a16"
        },
        {
          "name": "docs",
          "color": "#0075ca"
        }
      ],
      "attachments": [],
      "children": {
        "total": 0,
        "items": []
      },
      "comments": {
        "total": 3,
        "items": [
          {
            "body": "Reproduced on the staging cluster.",
            "createdAt": "2025-12-08T08:00:00.000Z",
            "author": {
              "user": {
                "name": "Edsger Dijkstra"
              }
            }
          },
          {
            "body": "This is the same root cause as the retry storm last month.",
            "createdAt": "2025-12-08T08:15:00.000Z",
            "author": {
              "user": {
                "name": "Tim Berners-Lee"
              }
            }
          },
          {
            "body": "Shipped behind a flag; watching the error rate.",
            "createdAt": "2025-12-08T08:30:00.000Z",
            "author": {
              "user": {
                "name": "Leslie Lamport"
              }
            }
          }
        ]
      }
    }
  }
}

Rayfold 1 request

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "issue",
      "args": {
        "id": "i002"
      },
      "shape": "{ ...Issue.card version reporter { ...Member.default } labels { ...Label.default } attachments { filename size } children(page: { first: 5 }) { total items { key state } } comments(page: { first: 10 }) { total items { ...Comment.default } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "$type": "Issue",
    "id": "i002",
    "key": "ING-2",
    "title": "Document the batch planner on reconnect",
    "state": "IN_PROGRESS",
    "priority": "URGENT",
    "updatedAt": "2025-12-08T08:00:00.000Z",
    "assignee": {
      "$type": "Member",
      "id": "m08",
      "role": "MEMBER",
      "user": {
        "$type": "User",
... 116 more lines
Full response body
{
  "id": 1,
  "data": {
    "$type": "Issue",
    "id": "i002",
    "key": "ING-2",
    "title": "Document the batch planner on reconnect",
    "state": "IN_PROGRESS",
    "priority": "URGENT",
    "updatedAt": "2025-12-08T08:00:00.000Z",
    "assignee": {
      "$type": "Member",
      "id": "m08",
      "role": "MEMBER",
      "user": {
        "$type": "User",
        "id": "u08",
        "name": "Tim Berners-Lee",
        "avatarUrl": "https://avatars.example.com/u08.png"
      }
    },
    "labels": [
      {
        "$type": "Label",
        "id": "l01",
        "name": "bug",
        "color": "#d73a4a"
      },
      {
        "$type": "Label",
        "id": "l02",
        "name": "feature",
        "color": "#0e8a16"
      },
      {
        "$type": "Label",
        "id": "l04",
        "name": "docs",
        "color": "#0075ca"
      }
    ],
    "estimate": 1,
    "project": {
      "$type": "Project",
      "id": "p1",
      "key": "ING",
      "name": "Ingest pipeline"
    },
    "sprint": {
      "$type": "Sprint",
      "id": "s02",
      "name": "ING Sprint 2"
    },
    "version": 1,
    "reporter": {
      "$type": "Member",
      "id": "m12",
      "role": "GUEST",
      "user": {
        "$type": "User",
        "id": "u12",
        "name": "Leslie Lamport",
        "avatarUrl": "https://avatars.example.com/u12.png"
      }
    },
    "attachments": [],
    "children": {
      "total": 0,
      "items": []
    },
    "comments": {
      "total": 3,
      "items": [
        {
          "$type": "Comment",
          "id": "c0001",
          "body": "Reproduced on the staging cluster.",
          "createdAt": "2025-12-08T08:00:00.000Z",
          "author": {
            "$type": "Member",
            "id": "m06",
            "role": "MEMBER",
            "user": {
              "$type": "User",
              "id": "u06",
              "name": "Edsger Dijkstra",
              "avatarUrl": "https://avatars.example.com/u06.png"
            }
          }
        },
        {
          "$type": "Comment",
          "id": "c0002",
          "body": "This is the same root cause as the retry storm last month.",
          "createdAt": "2025-12-08T08:15:00.000Z",
          "author": {
            "$type": "Member",
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "$type": "User",
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png"
            }
          }
        },
        {
          "$type": "Comment",
          "id": "c0003",
          "body": "Shipped behind a flag; watching the error rate.",
          "createdAt": "2025-12-08T08:30:00.000Z",
          "author": {
            "$type": "Member",
            "id": "m12",
            "role": "GUEST",
            "user": {
              "$type": "User",
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png"
            }
          }
        }
      ]
    }
  },
  "meta": {
    "cost": 49
  },
  "fin": true
}

Activity feed with four kinds of entry

Level

Measured: how a client knows what a row is (the kind of each row is part of the contract (1 = yes), higher is better)

RESTREST: no the kind of each row is part of the contract (1 = yes)noGraphQLGraphQL: yes the kind of each row is part of the contract (1 = yes)yesRayfoldRayfold: yes the kind of each row is part of the contract (1 = yes)yes
REST
a "type" string by convention; nothing in the contract says which fields go with which value, and a client that guesses wrong finds out at run time
GraphQL
an interface with inline fragments; the kind is checked by the schema
Rayfold
an `@interface` with `...on`; the kind is checked by the schema, and `$type` survives the compact and binary encodings

Bytes for the same 20 rows: REST 6,817, GraphQL 3,892, Rayfold 6,383.

See the real requests and responses (3)

REST 1 request

GET /projects/p1/activity?limit=20
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "2527952d3ae49c3a"

{
  "items": [
    {
      "id": "a0192",
      "type": "SprintClosedActivity",
      "at": "2026-01-05T09:00:00.000Z",
      "actor": {
        "id": "m01",
        "role": "OWNER",
        "user": {
          "id": "u01",
          "name": "Ada Lovelace",
          "avatarUrl": null,
          "email": "ada.lovelace@acme.example"
        }
      },
... 409 more lines
Full response body
{
  "items": [
    {
      "id": "a0192",
      "type": "SprintClosedActivity",
      "at": "2026-01-05T09:00:00.000Z",
      "actor": {
        "id": "m01",
        "role": "OWNER",
        "user": {
          "id": "u01",
          "name": "Ada Lovelace",
          "avatarUrl": null,
          "email": "ada.lovelace@acme.example"
        }
      },
      "sprint": {
        "id": "s01",
        "name": "ING Sprint 1",
        "state": "CLOSED"
      },
      "completed": 14,
      "carriedOver": 3
    },
    {
      "id": "a0191",
      "type": "IssueCommented",
      "at": "2025-12-12T14:00:00.000Z",
      "actor": {
        "id": "m11",
        "role": "MEMBER",
        "user": {
          "id": "u11",
          "name": "Anita Borg",
          "avatarUrl": "https://avatars.example.com/u11.png",
          "email": "anita.borg@acme.example"
        }
      },
      "comment": {
        "id": "c0148",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-12T14:00:00.000Z"
      }
    },
    {
      "id": "a0190",
      "type": "IssueMovedActivity",
      "at": "2025-12-12T14:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "issue": {
        "id": "i100",
        "key": "ING-100",
        "title": "Document the batch planner under load"
      },
      "from": "TODO",
      "to": "IN_PROGRESS"
    },
    {
      "id": "a0174",
      "type": "IssueCommented",
      "at": "2025-12-12T09:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "comment": {
        "id": "c0136",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-12T09:00:00.000Z"
      }
    },
    {
      "id": "a0172",
      "type": "IssueMovedActivity",
      "at": "2025-12-12T04:00:00.000Z",
      "actor": {
        "id": "m08",
        "role": "MEMBER",
        "user": {
          "id": "u08",
          "name": "Tim Berners-Lee",
          "avatarUrl": "https://avatars.example.com/u08.png",
          "email": "tim.berners.lee@acme.example"
        }
      },
      "issue": {
        "id": "i091",
        "key": "ING-91",
        "title": "Refactor the retry budget after a redeploy"
      },
      "from": "TODO",
      "to": "IN_REVIEW"
    },
    {
      "id": "a0182",
      "type": "IssueCommented",
      "at": "2025-12-12T02:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "comment": {
        "id": "c0142",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-12T02:00:00.000Z"
      }
    },
    {
      "id": "a0181",
      "type": "IssueMovedActivity",
      "at": "2025-12-12T02:00:00.000Z",
      "actor": {
        "id": "m07",
        "role": "MEMBER",
        "user": {
          "id": "u07",
          "name": "Radia Perlman",
          "avatarUrl": null,
          "email": "radia.perlman@acme.example"
        }
      },
      "issue": {
        "id": "i096",
        "key": "ING-96",
        "title": "Add cursor pagination behind a proxy"
      },
      "from": "TODO",
      "to": "DONE"
    },
    {
      "id": "a0161",
      "type": "IssueCommented",
      "at": "2025-12-12T02:00:00.000Z",
      "actor": {
        "id": "m05",
        "role": "MEMBER",
        "user": {
          "id": "u05",
          "name": "Barbara Liskov",
          "avatarUrl": "https://avatars.example.com/u05.png",
          "email": "barbara.liskov@acme.example"
        }
      },
      "comment": {
        "id": "c0127",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-12T02:00:00.000Z"
      }
    },
    {
      "id": "a0170",
      "type": "IssueCommented",
      "at": "2025-12-12T00:00:00.000Z",
      "actor": {
        "id": "m11",
        "role": "MEMBER",
        "user": {
          "id": "u11",
          "name": "Anita Borg",
          "avatarUrl": "https://avatars.example.com/u11.png",
          "email": "anita.borg@acme.example"
        }
      },
      "comment": {
        "id": "c0133",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-12T00:00:00.000Z"
      }
    },
    {
      "id": "a0169",
      "type": "IssueMovedActivity",
      "at": "2025-12-12T00:00:00.000Z",
      "actor": {
        "id": "m07",
        "role": "MEMBER",
        "user": {
          "id": "u07",
          "name": "Radia Perlman",
          "avatarUrl": null,
          "email": "radia.perlman@acme.example"
        }
      },
      "issue": {
        "id": "i090",
        "key": "ING-90",
        "title": "Investigate keep-alives on reconnect"
      },
      "from": "TODO",
      "to": "IN_PROGRESS"
    },
    {
      "id": "a0187",
      "type": "IssueCommented",
      "at": "2025-12-11T22:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "comment": {
        "id": "c0145",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-11T22:00:00.000Z"
      }
    },
    {
      "id": "a0186",
      "type": "IssueMovedActivity",
      "at": "2025-12-11T22:00:00.000Z",
      "actor": {
        "id": "m11",
        "role": "MEMBER",
        "user": {
          "id": "u11",
          "name": "Anita Borg",
          "avatarUrl": "https://avatars.example.com/u11.png",
          "email": "anita.borg@acme.example"
        }
      },
      "issue": {
        "id": "i098",
        "key": "ING-98",
        "title": "Investigate policy pushdown behind a proxy"
      },
      "from": "TODO",
      "to": "DONE"
    },
    {
      "id": "a0177",
      "type": "IssueCommented",
      "at": "2025-12-11T17:00:00.000Z",
      "actor": {
        "id": "m02",
        "role": "ADMIN",
        "user": {
          "id": "u02",
          "name": "Grace Hopper",
          "avatarUrl": "https://avatars.example.com/u02.png",
          "email": "grace.hopper@acme.example"
        }
      },
      "comment": {
        "id": "c0139",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-11T17:00:00.000Z"
      }
    },
    {
      "id": "a0152",
      "type": "IssueMovedActivity",
      "at": "2025-12-11T14:00:00.000Z",
      "actor": {
        "id": "m01",
        "role": "OWNER",
        "user": {
          "id": "u01",
          "name": "Ada Lovelace",
          "avatarUrl": null,
          "email": "ada.lovelace@acme.example"
        }
      },
      "issue": {
        "id": "i081",
        "key": "ING-81",
        "title": "Add the idempotency store for offline clients"
      },
      "from": "TODO",
      "to": "DONE"
    },
    {
      "id": "a0139",
      "type": "IssueMovedActivity",
      "at": "2025-12-11T14:00:00.000Z",
      "actor": {
        "id": "m10",
        "role": "MEMBER",
        "user": {
          "id": "u10",
          "name": "Vint Cerf",
          "avatarUrl": null,
          "email": "vint.cerf@acme.example"
        }
      },
      "issue": {
        "id": "i073",
        "key": "ING-73",
        "title": "Document policy pushdown for offline clients"
      },
      "from": "TODO",
      "to": "DONE"
    },
    {
      "id": "a0166",
      "type": "IssueCommented",
      "at": "2025-12-11T12:00:00.000Z",
      "actor": {
        "id": "m07",
        "role": "MEMBER",
        "user": {
          "id": "u07",
          "name": "Radia Perlman",
          "avatarUrl": null,
          "email": "radia.perlman@acme.example"
        }
      },
      "comment": {
        "id": "c0130",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-11T12:00:00.000Z"
      }
    },
    {
      "id": "a0165",
      "type": "IssueMovedActivity",
      "at": "2025-12-11T12:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "issue": {
        "id": "i088",
        "key": "ING-88",
        "title": "Remove schema reload for large pages"
      },
      "from": "TODO",
      "to": "DONE"
    },
    {
      "id": "a0141",
      "type": "IssueCommented",
      "at": "2025-12-11T12:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "comment": {
        "id": "c0109",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-11T12:00:00.000Z"
      }
    },
    {
      "id": "a0150",
      "type": "IssueCommented",
      "at": "2025-12-11T11:00:00.000Z",
      "actor": {
        "id": "m08",
        "role": "MEMBER",
        "user": {
          "id": "u08",
          "name": "Tim Berners-Lee",
          "avatarUrl": "https://avatars.example.com/u08.png",
          "email": "tim.berners.lee@acme.example"
        }
      },
      "comment": {
        "id": "c0118",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-11T11:00:00.000Z"
      }
    },
    {
      "id": "a0189",
      "type": "IssueOpened",
      "at": "2025-12-11T09:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "issue": {
        "id": "i100",
        "key": "ING-100",
        "title": "Document the batch planner under load"
      }
    }
  ],
  "cursor": "a0189",
  "hasMore": true,
  "total": 192
}

GraphQL 1 request

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ activity(projectId: \"p1\", first: 20) { total items { __typename id at actor { user { name } } ... on IssueOpened { issue { key title } } ... on IssueMovedActivity { from to issue { key } } ... on IssueCommented { comment { body } } ... on SprintClosedActivity { sprint { name } completed carriedOver } } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "activity": {
      "total": 192,
      "items": [
        {
          "__typename": "SprintClosedActivity",
          "id": "a0192",
          "at": "2026-01-05T09:00:00.000Z",
          "actor": {
            "user": {
              "name": "Ada Lovelace"
            }
          },
          "sprint": {
            "name": "ING Sprint 1"
... 272 more lines
Full response body
{
  "data": {
    "activity": {
      "total": 192,
      "items": [
        {
          "__typename": "SprintClosedActivity",
          "id": "a0192",
          "at": "2026-01-05T09:00:00.000Z",
          "actor": {
            "user": {
              "name": "Ada Lovelace"
            }
          },
          "sprint": {
            "name": "ING Sprint 1"
          },
          "completed": 14,
          "carriedOver": 3
        },
        {
          "__typename": "IssueCommented",
          "id": "a0191",
          "at": "2025-12-12T14:00:00.000Z",
          "actor": {
            "user": {
              "name": "Anita Borg"
            }
          },
          "comment": {
            "body": "Reproduced on the staging cluster."
          }
        },
        {
          "__typename": "IssueMovedActivity",
          "id": "a0190",
          "at": "2025-12-12T14:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          },
          "from": "TODO",
          "to": "IN_PROGRESS",
          "issue": {
            "key": "ING-100"
          }
        },
        {
          "__typename": "IssueCommented",
          "id": "a0174",
          "at": "2025-12-12T09:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          },
          "comment": {
            "body": "Reproduced on the staging cluster."
          }
        },
        {
          "__typename": "IssueMovedActivity",
          "id": "a0172",
          "at": "2025-12-12T04:00:00.000Z",
          "actor": {
            "user": {
              "name": "Tim Berners-Lee"
            }
          },
          "from": "TODO",
          "to": "IN_REVIEW",
          "issue": {
            "key": "ING-91"
          }
        },
        {
          "__typename": "IssueCommented",
          "id": "a0182",
          "at": "2025-12-12T02:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          },
          "comment": {
            "body": "Reproduced on the staging cluster."
          }
        },
        {
          "__typename": "IssueMovedActivity",
          "id": "a0181",
          "at": "2025-12-12T02:00:00.000Z",
          "actor": {
            "user": {
              "name": "Radia Perlman"
            }
          },
          "from": "TODO",
          "to": "DONE",
          "issue": {
            "key": "ING-96"
          }
        },
        {
          "__typename": "IssueCommented",
          "id": "a0161",
          "at": "2025-12-12T02:00:00.000Z",
          "actor": {
            "user": {
              "name": "Barbara Liskov"
            }
          },
          "comment": {
            "body": "Reproduced on the staging cluster."
          }
        },
        {
          "__typename": "IssueCommented",
          "id": "a0170",
          "at": "2025-12-12T00:00:00.000Z",
          "actor": {
            "user": {
              "name": "Anita Borg"
            }
          },
          "comment": {
            "body": "Reproduced on the staging cluster."
          }
        },
        {
          "__typename": "IssueMovedActivity",
          "id": "a0169",
          "at": "2025-12-12T00:00:00.000Z",
          "actor": {
            "user": {
              "name": "Radia Perlman"
            }
          },
          "from": "TODO",
          "to": "IN_PROGRESS",
          "issue": {
            "key": "ING-90"
          }
        },
        {
          "__typename": "IssueCommented",
          "id": "a0187",
          "at": "2025-12-11T22:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          },
          "comment": {
            "body": "Reproduced on the staging cluster."
          }
        },
        {
          "__typename": "IssueMovedActivity",
          "id": "a0186",
          "at": "2025-12-11T22:00:00.000Z",
          "actor": {
            "user": {
              "name": "Anita Borg"
            }
          },
          "from": "TODO",
          "to": "DONE",
          "issue": {
            "key": "ING-98"
          }
        },
        {
          "__typename": "IssueCommented",
          "id": "a0177",
          "at": "2025-12-11T17:00:00.000Z",
          "actor": {
            "user": {
              "name": "Grace Hopper"
            }
          },
          "comment": {
            "body": "Reproduced on the staging cluster."
          }
        },
        {
          "__typename": "IssueMovedActivity",
          "id": "a0152",
          "at": "2025-12-11T14:00:00.000Z",
          "actor": {
            "user": {
              "name": "Ada Lovelace"
            }
          },
          "from": "TODO",
          "to": "DONE",
          "issue": {
            "key": "ING-81"
          }
        },
        {
          "__typename": "IssueMovedActivity",
          "id": "a0139",
          "at": "2025-12-11T14:00:00.000Z",
          "actor": {
            "user": {
              "name": "Vint Cerf"
            }
          },
          "from": "TODO",
          "to": "DONE",
          "issue": {
            "key": "ING-73"
          }
        },
        {
          "__typename": "IssueCommented",
          "id": "a0166",
          "at": "2025-12-11T12:00:00.000Z",
          "actor": {
            "user": {
              "name": "Radia Perlman"
            }
          },
          "comment": {
            "body": "Reproduced on the staging cluster."
          }
        },
        {
          "__typename": "IssueMovedActivity",
          "id": "a0165",
          "at": "2025-12-11T12:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          },
          "from": "TODO",
          "to": "DONE",
          "issue": {
            "key": "ING-88"
          }
        },
        {
          "__typename": "IssueCommented",
          "id": "a0141",
          "at": "2025-12-11T12:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          },
          "comment": {
            "body": "Reproduced on the staging cluster."
          }
        },
        {
          "__typename": "IssueCommented",
          "id": "a0150",
          "at": "2025-12-11T11:00:00.000Z",
          "actor": {
            "user": {
              "name": "Tim Berners-Lee"
            }
          },
          "comment": {
            "body": "Reproduced on the staging cluster."
          }
        },
        {
          "__typename": "IssueOpened",
          "id": "a0189",
          "at": "2025-12-11T09:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          },
          "issue": {
            "key": "ING-100",
            "title": "Document the batch planner under load"
          }
        }
      ]
    }
  }
}

Rayfold 1 request

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "activity",
      "args": {
        "projectId": "p1",
        "page": {
          "first": 20
        }
      },
      "shape": "{ total items { id at actor { ...Member.default } ...on IssueOpened { issue { key title } } ...on IssueMovedActivity { from to issue { key } } ...on IssueCommented { comment { body } } ...on SprintClosedActivity { sprint { name } completed carriedOver } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "total": 192,
    "items": [
      {
        "$type": "SprintClosedActivity",
        "id": "a0192",
        "at": "2026-01-05T09:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m01",
          "role": "OWNER",
          "user": {
            "$type": "User",
            "id": "u01",
... 415 more lines
Full response body
{
  "id": 1,
  "data": {
    "total": 192,
    "items": [
      {
        "$type": "SprintClosedActivity",
        "id": "a0192",
        "at": "2026-01-05T09:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m01",
          "role": "OWNER",
          "user": {
            "$type": "User",
            "id": "u01",
            "name": "Ada Lovelace",
            "avatarUrl": null
          }
        },
        "sprint": {
          "$type": "Sprint",
          "name": "ING Sprint 1"
        },
        "completed": 14,
        "carriedOver": 3
      },
      {
        "$type": "IssueCommented",
        "id": "a0191",
        "at": "2025-12-12T14:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m11",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u11",
            "name": "Anita Borg",
            "avatarUrl": "https://avatars.example.com/u11.png"
          }
        },
        "comment": {
          "$type": "Comment",
          "body": "Reproduced on the staging cluster."
        }
      },
      {
        "$type": "IssueMovedActivity",
        "id": "a0190",
        "at": "2025-12-12T14:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m03",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u03",
            "name": "Alan Turing",
            "avatarUrl": "https://avatars.example.com/u03.png"
          }
        },
        "from": "TODO",
        "to": "IN_PROGRESS",
        "issue": {
          "$type": "Issue",
          "key": "ING-100"
        }
      },
      {
        "$type": "IssueCommented",
        "id": "a0174",
        "at": "2025-12-12T09:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m03",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u03",
            "name": "Alan Turing",
            "avatarUrl": "https://avatars.example.com/u03.png"
          }
        },
        "comment": {
          "$type": "Comment",
          "body": "Reproduced on the staging cluster."
        }
      },
      {
        "$type": "IssueMovedActivity",
        "id": "a0172",
        "at": "2025-12-12T04:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m08",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u08",
            "name": "Tim Berners-Lee",
            "avatarUrl": "https://avatars.example.com/u08.png"
          }
        },
        "from": "TODO",
        "to": "IN_REVIEW",
        "issue": {
          "$type": "Issue",
          "key": "ING-91"
        }
      },
      {
        "$type": "IssueCommented",
        "id": "a0182",
        "at": "2025-12-12T02:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m03",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u03",
            "name": "Alan Turing",
            "avatarUrl": "https://avatars.example.com/u03.png"
          }
        },
        "comment": {
          "$type": "Comment",
          "body": "Reproduced on the staging cluster."
        }
      },
      {
        "$type": "IssueMovedActivity",
        "id": "a0181",
        "at": "2025-12-12T02:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m07",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u07",
            "name": "Radia Perlman",
            "avatarUrl": null
          }
        },
        "from": "TODO",
        "to": "DONE",
        "issue": {
          "$type": "Issue",
          "key": "ING-96"
        }
      },
      {
        "$type": "IssueCommented",
        "id": "a0161",
        "at": "2025-12-12T02:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m05",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u05",
            "name": "Barbara Liskov",
            "avatarUrl": "https://avatars.example.com/u05.png"
          }
        },
        "comment": {
          "$type": "Comment",
          "body": "Reproduced on the staging cluster."
        }
      },
      {
        "$type": "IssueCommented",
        "id": "a0170",
        "at": "2025-12-12T00:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m11",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u11",
            "name": "Anita Borg",
            "avatarUrl": "https://avatars.example.com/u11.png"
          }
        },
        "comment": {
          "$type": "Comment",
          "body": "Reproduced on the staging cluster."
        }
      },
      {
        "$type": "IssueMovedActivity",
        "id": "a0169",
        "at": "2025-12-12T00:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m07",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u07",
            "name": "Radia Perlman",
            "avatarUrl": null
          }
        },
        "from": "TODO",
        "to": "IN_PROGRESS",
        "issue": {
          "$type": "Issue",
          "key": "ING-90"
        }
      },
      {
        "$type": "IssueCommented",
        "id": "a0187",
        "at": "2025-12-11T22:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m03",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u03",
            "name": "Alan Turing",
            "avatarUrl": "https://avatars.example.com/u03.png"
          }
        },
        "comment": {
          "$type": "Comment",
          "body": "Reproduced on the staging cluster."
        }
      },
      {
        "$type": "IssueMovedActivity",
        "id": "a0186",
        "at": "2025-12-11T22:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m11",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u11",
            "name": "Anita Borg",
            "avatarUrl": "https://avatars.example.com/u11.png"
          }
        },
        "from": "TODO",
        "to": "DONE",
        "issue": {
          "$type": "Issue",
          "key": "ING-98"
        }
      },
      {
        "$type": "IssueCommented",
        "id": "a0177",
        "at": "2025-12-11T17:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m02",
          "role": "ADMIN",
          "user": {
            "$type": "User",
            "id": "u02",
            "name": "Grace Hopper",
            "avatarUrl": "https://avatars.example.com/u02.png"
          }
        },
        "comment": {
          "$type": "Comment",
          "body": "Reproduced on the staging cluster."
        }
      },
      {
        "$type": "IssueMovedActivity",
        "id": "a0152",
        "at": "2025-12-11T14:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m01",
          "role": "OWNER",
          "user": {
            "$type": "User",
            "id": "u01",
            "name": "Ada Lovelace",
            "avatarUrl": null
          }
        },
        "from": "TODO",
        "to": "DONE",
        "issue": {
          "$type": "Issue",
          "key": "ING-81"
        }
      },
      {
        "$type": "IssueMovedActivity",
        "id": "a0139",
        "at": "2025-12-11T14:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m10",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u10",
            "name": "Vint Cerf",
            "avatarUrl": null
          }
        },
        "from": "TODO",
        "to": "DONE",
        "issue": {
          "$type": "Issue",
          "key": "ING-73"
        }
      },
      {
        "$type": "IssueCommented",
        "id": "a0166",
        "at": "2025-12-11T12:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m07",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u07",
            "name": "Radia Perlman",
            "avatarUrl": null
          }
        },
        "comment": {
          "$type": "Comment",
          "body": "Reproduced on the staging cluster."
        }
      },
      {
        "$type": "IssueMovedActivity",
        "id": "a0165",
        "at": "2025-12-11T12:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m03",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u03",
            "name": "Alan Turing",
            "avatarUrl": "https://avatars.example.com/u03.png"
          }
        },
        "from": "TODO",
        "to": "DONE",
        "issue": {
          "$type": "Issue",
          "key": "ING-88"
        }
      },
      {
        "$type": "IssueCommented",
        "id": "a0141",
        "at": "2025-12-11T12:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m03",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u03",
            "name": "Alan Turing",
            "avatarUrl": "https://avatars.example.com/u03.png"
          }
        },
        "comment": {
          "$type": "Comment",
          "body": "Reproduced on the staging cluster."
        }
      },
      {
        "$type": "IssueCommented",
        "id": "a0150",
        "at": "2025-12-11T11:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m08",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u08",
            "name": "Tim Berners-Lee",
            "avatarUrl": "https://avatars.example.com/u08.png"
          }
        },
        "comment": {
          "$type": "Comment",
          "body": "Reproduced on the staging cluster."
        }
      },
      {
        "$type": "IssueOpened",
        "id": "a0189",
        "at": "2025-12-11T09:00:00.000Z",
        "actor": {
          "$type": "Member",
          "id": "m03",
          "role": "MEMBER",
          "user": {
            "$type": "User",
            "id": "u03",
            "name": "Alan Turing",
            "avatarUrl": "https://avatars.example.com/u03.png"
          }
        },
        "issue": {
          "$type": "Issue",
          "key": "ING-100",
          "title": "Document the batch planner under load"
        }
      }
    ]
  },
  "meta": {
    "cost": 146
  },
  "fin": true
}

Search returning three kinds of thing

Level

Measured: bytes, same ten hits (bytes for ten mixed results, lower is better)

RESTREST: 10,554 bytes for ten mixed results10,554GraphQLGraphQL: 1,095 bytes for ten mixed results1,095RayfoldRayfold: 1,094 bytes for ten mixed results1,094
REST
10,554 B: each hit wrapped in an envelope naming its kind, and each resource sent whole
GraphQL
1,095 B: a union, with the fields the screen shows
Rayfold
1,094 B: a union, with the fields the screen shows
See the real requests and responses (3)

REST 1 request

GET /search?q=cache&limit=10
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "6d2a12b416dbe8a6"

{
  "items": [
    {
      "type": "Issue",
      "issue": {
        "id": "i592",
        "key": "SEC-92",
        "title": "Cache cold starts after a redeploy",
        "description": "Investigate cursor pagination.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
        "state": "TRIAGE",
        "priority": "LOW",
        "estimate": 2,
        "createdAt": "2025-12-31T21:00:00.000Z",
        "updatedAt": "2026-01-01T04:00:00.000Z",
        "version": 1,
        "projectId": "p6",
... 485 more lines
Full response body
{
  "items": [
    {
      "type": "Issue",
      "issue": {
        "id": "i592",
        "key": "SEC-92",
        "title": "Cache cold starts after a redeploy",
        "description": "Investigate cursor pagination.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
        "state": "TRIAGE",
        "priority": "LOW",
        "estimate": 2,
        "createdAt": "2025-12-31T21:00:00.000Z",
        "updatedAt": "2026-01-01T04:00:00.000Z",
        "version": 1,
        "projectId": "p6",
        "sprintId": null,
        "reporterId": "m07",
        "assigneeId": "m06",
        "labelIds": [
          "l07"
        ],
        "parentId": null,
        "attachments": [],
        "externalState": null,
        "assignee": {
          "id": "m06",
          "role": "MEMBER",
          "user": {
            "id": "u06",
            "name": "Edsger Dijkstra",
            "avatarUrl": "https://avatars.example.com/u06.png",
            "email": "edsger.dijkstra@acme.example"
          }
        },
        "labels": [
          {
            "id": "l07",
            "name": "ux",
            "color": "#d4c5f9"
          }
        ]
      }
    },
    {
      "type": "Issue",
      "issue": {
        "id": "i591",
        "key": "SEC-91",
        "title": "Cache policy pushdown in the Kotlin runtime",
        "description": "Add the retry budget.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
        "state": "CANCELLED",
        "priority": "MEDIUM",
        "estimate": 5,
        "createdAt": "2025-12-31T20:00:00.000Z",
        "updatedAt": "2025-12-31T20:00:00.000Z",
        "version": 1,
        "projectId": "p6",
        "sprintId": "s17",
        "reporterId": "m09",
        "assigneeId": "m09",
        "labelIds": [
          "l01",
          "l03",
          "l10"
        ],
        "parentId": null,
        "attachments": [],
        "externalState": null,
        "assignee": {
          "id": "m09",
          "role": "MEMBER",
          "user": {
            "id": "u09",
            "name": "Margaret Hamilton",
            "avatarUrl": "https://avatars.example.com/u09.png",
            "email": "margaret.hamilton@acme.example"
          }
        },
        "labels": [
          {
            "id": "l01",
            "name": "bug",
            "color": "#d73a4a"
          },
          {
            "id": "l03",
            "name": "chore",
            "color": "#cfd3d7"
          },
          {
            "id": "l10",
            "name": "regression",
            "color": "#e99695"
          }
        ]
      }
    },
    {
      "type": "Issue",
      "issue": {
        "id": "i581",
        "key": "SEC-81",
        "title": "Cache the WebSocket transport on reconnect",
        "description": "Retry policy pushdown.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
        "state": "TRIAGE",
        "priority": "HIGH",
        "estimate": 1,
        "createdAt": "2025-12-31T10:00:00.000Z",
        "updatedAt": "2026-01-01T04:00:00.000Z",
        "version": 1,
        "projectId": "p6",
        "sprintId": null,
        "reporterId": "m03",
        "assigneeId": "m06",
        "labelIds": [
          "l04",
          "l05"
        ],
        "parentId": "i574",
        "attachments": [],
        "externalState": "SYNCED",
        "assignee": {
          "id": "m06",
          "role": "MEMBER",
          "user": {
            "id": "u06",
            "name": "Edsger Dijkstra",
            "avatarUrl": "https://avatars.example.com/u06.png",
            "email": "edsger.dijkstra@acme.example"
          }
        },
        "labels": [
          {
            "id": "l04",
            "name": "docs",
            "color": "#0075ca"
          },
          {
            "id": "l05",
            "name": "performance",
            "color": "#a2eeef"
          }
        ]
      }
    },
    {
      "type": "Issue",
      "issue": {
        "id": "i575",
        "key": "SEC-75",
        "title": "Cache schema reload on slow networks",
        "description": "Fix the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
        "state": "IN_REVIEW",
        "priority": "LOW",
        "estimate": 3,
        "createdAt": "2025-12-31T04:00:00.000Z",
        "updatedAt": "2026-01-01T07:00:00.000Z",
        "version": 1,
        "projectId": "p6",
        "sprintId": "s16",
        "reporterId": "m03",
        "assigneeId": "m06",
        "labelIds": [
          "l02",
          "l03",
          "l07"
        ],
        "parentId": null,
        "attachments": [],
        "externalState": null,
        "assignee": {
          "id": "m06",
          "role": "MEMBER",
          "user": {
            "id": "u06",
            "name": "Edsger Dijkstra",
            "avatarUrl": "https://avatars.example.com/u06.png",
            "email": "edsger.dijkstra@acme.example"
          }
        },
        "labels": [
          {
            "id": "l02",
            "name": "feature",
            "color": "#0e8a16"
          },
          {
            "id": "l03",
            "name": "chore",
            "color": "#cfd3d7"
          },
          {
            "id": "l07",
            "name": "ux",
            "color": "#d4c5f9"
          }
        ]
      }
    },
    {
      "type": "Issue",
      "issue": {
        "id": "i570",
        "key": "SEC-70",
        "title": "Cache the idempotency store on reconnect",
        "description": "Cache cold starts.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
        "state": "TRIAGE",
        "priority": "NONE",
        "estimate": null,
        "createdAt": "2025-12-30T23:00:00.000Z",
        "updatedAt": "2026-01-01T01:00:00.000Z",
        "version": 1,
        "projectId": "p6",
        "sprintId": null,
        "reporterId": "m02",
        "assigneeId": "m08",
        "labelIds": [
          "l03",
          "l04",
          "l07"
        ],
        "parentId": null,
        "attachments": [
          {
            "filename": "trace-570.json",
            "contentType": "application/json",
            "size": 240021,
            "url": "https://files.example.com/trace-570.json"
          }
        ],
        "externalState": null,
        "assignee": {
          "id": "m08",
          "role": "MEMBER",
          "user": {
            "id": "u08",
            "name": "Tim Berners-Lee",
            "avatarUrl": "https://avatars.example.com/u08.png",
            "email": "tim.berners.lee@acme.example"
          }
        },
        "labels": [
          {
            "id": "l03",
            "name": "chore",
            "color": "#cfd3d7"
          },
          {
            "id": "l04",
            "name": "docs",
            "color": "#0075ca"
          },
          {
            "id": "l07",
            "name": "ux",
            "color": "#d4c5f9"
          }
        ]
      }
    },
    {
      "type": "Issue",
      "issue": {
        "id": "i568",
        "key": "SEC-68",
        "title": "Cache schema reload for offline clients",
        "description": "Add the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
        "state": "TRIAGE",
        "priority": "NONE",
        "estimate": 8,
        "createdAt": "2025-12-30T21:00:00.000Z",
        "updatedAt": "2026-01-01T00:00:00.000Z",
        "version": 1,
        "projectId": "p6",
        "sprintId": null,
        "reporterId": "m12",
        "assigneeId": "m04",
        "labelIds": [
          "l08"
        ],
        "parentId": null,
        "attachments": [],
        "externalState": null,
        "assignee": {
          "id": "m04",
          "role": "MEMBER",
          "user": {
            "id": "u04",
            "name": "Katherine Johnson",
            "avatarUrl": null,
            "email": "katherine.johnson@acme.example"
          }
        },
        "labels": [
          {
            "id": "l08",
            "name": "infra",
            "color": "#5319e7"
          }
        ]
      }
    },
    {
      "type": "Issue",
      "issue": {
        "id": "i560",
        "key": "SEC-60",
        "title": "Cache schema reload after a redeploy",
        "description": "Investigate the retry budget.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
        "state": "BACKLOG",
        "priority": "HIGH",
        "estimate": 5,
        "createdAt": "2025-12-30T13:00:00.000Z",
        "updatedAt": "2025-12-31T20:00:00.000Z",
        "version": 1,
        "projectId": "p6",
        "sprintId": null,
        "reporterId": "m01",
        "assigneeId": "m12",
        "labelIds": [
          "l02",
          "l05"
        ],
        "parentId": null,
        "attachments": [
          {
            "filename": "trace-560.json",
            "contentType": "application/json",
            "size": 93853,
            "url": "https://files.example.com/trace-560.json"
          }
        ],
        "externalState": "SYNCED",
        "assignee": {
          "id": "m12",
          "role": "GUEST",
          "user": {
            "id": "u12",
            "name": "Leslie Lamport",
            "avatarUrl": "https://avatars.example.com/u12.png",
            "email": "leslie.lamport@acme.example"
          }
        },
        "labels": [
          {
            "id": "l02",
            "name": "feature",
            "color": "#0e8a16"
          },
          {
            "id": "l05",
            "name": "performance",
            "color": "#a2eeef"
          }
        ]
      }
    },
    {
      "type": "Issue",
      "issue": {
        "id": "i531",
        "key": "SEC-31",
        "title": "Cache the batch planner for large pages",
        "description": "Investigate cursor pagination.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
        "state": "DONE",
        "priority": "HIGH",
        "estimate": null,
        "createdAt": "2025-12-29T08:00:00.000Z",
        "updatedAt": "2025-12-30T20:00:00.000Z",
        "version": 1,
        "projectId": "p6",
        "sprintId": "s18",
        "reporterId": "m06",
        "assigneeId": "m06",
        "labelIds": [
          "l09"
        ],
        "parentId": null,
        "attachments": [],
        "externalState": null,
        "assignee": {
          "id": "m06",
          "role": "MEMBER",
          "user": {
            "id": "u06",
            "name": "Edsger Dijkstra",
            "avatarUrl": "https://avatars.example.com/u06.png",
            "email": "edsger.dijkstra@acme.example"
          }
        },
        "labels": [
          {
            "id": "l09",
            "name": "flaky",
            "color": "#fbca04"
          }
        ]
      }
    },
    {
      "type": "Issue",
      "issue": {
        "id": "i516",
        "key": "SEC-16",
        "title": "Cache cursor pagination in the Kotlin runtime",
        "description": "Investigate the idempotency store.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
        "state": "CANCELLED",
        "priority": "NONE",
        "estimate": null,
        "createdAt": "2025-12-28T17:00:00.000Z",
        "updatedAt": "2025-12-28T18:00:00.000Z",
        "version": 1,
        "projectId": "p6",
        "sprintId": "s16",
        "reporterId": "m05",
        "assigneeId": "m04",
        "labelIds": [
          "l03",
          "l04",
          "l05"
        ],
        "parentId": null,
        "attachments": [],
        "externalState": null,
        "assignee": {
          "id": "m04",
          "role": "MEMBER",
          "user": {
            "id": "u04",
            "name": "Katherine Johnson",
            "avatarUrl": null,
            "email": "katherine.johnson@acme.example"
          }
        },
        "labels": [
          {
            "id": "l03",
            "name": "chore",
            "color": "#cfd3d7"
          },
          {
            "id": "l04",
            "name": "docs",
            "color": "#0075ca"
          },
          {
            "id": "l05",
            "name": "performance",
            "color": "#a2eeef"
          }
        ]
      }
    },
    {
      "type": "Issue",
      "issue": {
        "id": "i515",
        "key": "SEC-15",
        "title": "Cache the retry budget in the Kotlin runtime",
        "description": "Remove the idempotency store.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
        "state": "CANCELLED",
        "priority": "URGENT",
        "estimate": 13,
        "createdAt": "2025-12-28T16:00:00.000Z",
        "updatedAt": "2025-12-30T06:00:00.000Z",
        "version": 1,
        "projectId": "p6",
        "sprintId": "s17",
        "reporterId": "m09",
        "assigneeId": "m10",
        "labelIds": [
          "l10"
        ],
        "parentId": null,
        "attachments": [],
        "externalState": null,
        "assignee": {
          "id": "m10",
          "role": "MEMBER",
          "user": {
            "id": "u10",
            "name": "Vint Cerf",
            "avatarUrl": null,
            "email": "vint.cerf@acme.example"
          }
        },
        "labels": [
          {
            "id": "l10",
            "name": "regression",
            "color": "#e99695"
          }
        ]
      }
    }
  ],
  "cursor": "Issue:i515",
  "hasMore": true,
  "total": 59
}

GraphQL 1 request

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ search(q: \"cache\", first: 10) { total items { __typename ... on Issue { key title } ... on Project { key name } ... on Comment { body } } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "search": {
      "total": 59,
      "items": [
        {
          "__typename": "Issue",
          "key": "SEC-92",
          "title": "Cache cold starts after a redeploy"
        },
        {
          "__typename": "Issue",
          "key": "SEC-91",
          "title": "Cache policy pushdown in the Kotlin runtime"
        },
        {
... 43 more lines
Full response body
{
  "data": {
    "search": {
      "total": 59,
      "items": [
        {
          "__typename": "Issue",
          "key": "SEC-92",
          "title": "Cache cold starts after a redeploy"
        },
        {
          "__typename": "Issue",
          "key": "SEC-91",
          "title": "Cache policy pushdown in the Kotlin runtime"
        },
        {
          "__typename": "Issue",
          "key": "SEC-81",
          "title": "Cache the WebSocket transport on reconnect"
        },
        {
          "__typename": "Issue",
          "key": "SEC-75",
          "title": "Cache schema reload on slow networks"
        },
        {
          "__typename": "Issue",
          "key": "SEC-70",
          "title": "Cache the idempotency store on reconnect"
        },
        {
          "__typename": "Issue",
          "key": "SEC-68",
          "title": "Cache schema reload for offline clients"
        },
        {
          "__typename": "Issue",
          "key": "SEC-60",
          "title": "Cache schema reload after a redeploy"
        },
        {
          "__typename": "Issue",
          "key": "SEC-31",
          "title": "Cache the batch planner for large pages"
        },
        {
          "__typename": "Issue",
          "key": "SEC-16",
          "title": "Cache cursor pagination in the Kotlin runtime"
        },
        {
          "__typename": "Issue",
          "key": "SEC-15",
          "title": "Cache the retry budget in the Kotlin runtime"
        }
      ]
    }
  }
}

Rayfold 1 request

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "search",
      "args": {
        "q": "cache",
        "page": {
          "first": 10
        }
      },
      "shape": "{ total items { ...on Issue { key title } ...on Project { key name } ...on Comment { body } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "total": 59,
    "items": [
      {
        "$type": "Issue",
        "key": "SEC-92",
        "title": "Cache cold starts after a redeploy"
      },
      {
        "$type": "Issue",
        "key": "SEC-91",
        "title": "Cache policy pushdown in the Kotlin runtime"
      },
      {
... 46 more lines
Full response body
{
  "id": 1,
  "data": {
    "total": 59,
    "items": [
      {
        "$type": "Issue",
        "key": "SEC-92",
        "title": "Cache cold starts after a redeploy"
      },
      {
        "$type": "Issue",
        "key": "SEC-91",
        "title": "Cache policy pushdown in the Kotlin runtime"
      },
      {
        "$type": "Issue",
        "key": "SEC-81",
        "title": "Cache the WebSocket transport on reconnect"
      },
      {
        "$type": "Issue",
        "key": "SEC-75",
        "title": "Cache schema reload on slow networks"
      },
      {
        "$type": "Issue",
        "key": "SEC-70",
        "title": "Cache the idempotency store on reconnect"
      },
      {
        "$type": "Issue",
        "key": "SEC-68",
        "title": "Cache schema reload for offline clients"
      },
      {
        "$type": "Issue",
        "key": "SEC-60",
        "title": "Cache schema reload after a redeploy"
      },
      {
        "$type": "Issue",
        "key": "SEC-31",
        "title": "Cache the batch planner for large pages"
      },
      {
        "$type": "Issue",
        "key": "SEC-16",
        "title": "Cache cursor pagination in the Kotlin runtime"
      },
      {
        "$type": "Issue",
        "key": "SEC-15",
        "title": "Cache the retry budget in the Kotlin runtime"
      }
    ]
  },
  "meta": {
    "cost": 31
  },
  "fin": true
}

Create an issue and show its page

Rayfold ahead

Measured: round trips to write and then read (network round trips, lower is better)

RESTREST: 2 network round trips2GraphQLGraphQL: 2 network round trips2RayfoldRayfold: 1 network round trips1
REST
2: POST /issues, then GET the new issue to load the page around it
GraphQL
2: a mutation cannot feed a query in the same request, so the read is a second call
Rayfold
1: the read op refers to the write op with `$ref`, and the server runs them in order
See the real requests and responses (5)

REST 2 requests

POST /issues
authorization: Bearer u01
content-type: application/json
idempotency-key: ws-create-0000001

{
  "projectId": "p1",
  "title": "Ship the migration"
}
201 Created
content-type: application/json
location: /issues/i1000

{
  "id": "i1000",
  "key": "ING-101",
  "title": "Ship the migration",
  "description": null,
  "state": "TRIAGE",
  "priority": "MEDIUM",
  "estimate": null,
  "createdAt": "2026-02-01T12:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": null,
  "reporterId": "m01",
  "assigneeId": null,
  "labelIds": [],
... 6 more lines
Full response body
{
  "id": "i1000",
  "key": "ING-101",
  "title": "Ship the migration",
  "description": null,
  "state": "TRIAGE",
  "priority": "MEDIUM",
  "estimate": null,
  "createdAt": "2026-02-01T12:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": null,
  "reporterId": "m01",
  "assigneeId": null,
  "labelIds": [],
  "parentId": null,
  "attachments": [],
  "externalState": null,
  "assignee": null,
  "labels": []
}
GET /issues/i1000
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "1"

{
  "id": "i1000",
  "key": "ING-101",
  "title": "Ship the migration",
  "description": null,
  "state": "TRIAGE",
  "priority": "MEDIUM",
  "estimate": null,
  "createdAt": "2026-02-01T12:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": null,
  "reporterId": "m01",
  "assigneeId": null,
  "labelIds": [],
... 6 more lines
Full response body
{
  "id": "i1000",
  "key": "ING-101",
  "title": "Ship the migration",
  "description": null,
  "state": "TRIAGE",
  "priority": "MEDIUM",
  "estimate": null,
  "createdAt": "2026-02-01T12:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": null,
  "reporterId": "m01",
  "assigneeId": null,
  "labelIds": [],
  "parentId": null,
  "attachments": [],
  "externalState": null,
  "assignee": null,
  "labels": []
}

GraphQL 2 requests

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "mutation { createIssue(input: { projectId: \"p1\", title: \"Ship the migration\" }) { id key } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "createIssue": {
      "id": "i1000",
      "key": "ING-101"
    }
  }
}
POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ issue(id: \"i1000\") { key title project { key } reporter { user { name } } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "issue": {
      "key": "ING-101",
      "title": "Ship the migration",
      "project": {
        "key": "ING"
      },
      "reporter": {
        "user": {
          "name": "Ada Lovelace"
        }
      }
    }
  }
}

Rayfold 1 request

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "createIssue",
      "args": {
        "input": {
          "projectId": "p1",
          "title": "Ship the migration"
        }
      },
      "key": "ws-create-0000002",
      "shape": "{ id key }"
    },
    {
      "id": 2,
... 10 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"ok":{"$type":"Issue","id":"i1000","key":"ING-101"},"patch":[{"set":"Issue:i1000","value":{"$type":"Issue","id":"i1000","key":"ING-101"}},{"invOp":["board","issues","activity"]}],"meta":{"cost":1},"fin":true}
{"id":2,"data":{"$type":"Issue","key":"ING-101","title":"Ship the migration","project":{"$type":"Project","key":"ING"},"reporter":{"$type":"Member","user":{"$type":"User","name":"Ada Lovelace"}}},"meta":{"cost":4},"fin":true}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "createIssue",
      "args": {
        "input": {
          "projectId": "p1",
          "title": "Ship the migration"
        }
      },
      "key": "ws-create-0000002",
      "shape": "{ id key }"
    },
    {
      "id": 2,
      "op": "issue",
      "args": {
        "id": {
          "$ref": "1.id"
        }
      },
      "shape": "{ key title project { key } reporter { user { name } } }"
    }
  ]
}

A write and the two screens that show it

Rayfold ahead

Measured: round trips for a write plus two screens (network round trips, lower is better)

RESTREST: 3 network round trips3GraphQLGraphQL: 2 network round trips2RayfoldRayfold: 1 network round trips1
REST
3: one for the write, one for the board, one for the feed
GraphQL
2: a document is a mutation or a query, never both, so the screens follow the write
Rayfold
1: writes and reads are ops of the same batch, run in order, and rows loaded for one op are not loaded again for the next

Within the request the server keeps what it loaded: the people on the board are not fetched a second time for the feed.

See the real requests and responses (6)

REST 3 requests

POST /issues
authorization: Bearer u01
content-type: application/json
idempotency-key: ws-batch-0000002

{
  "projectId": "p1",
  "title": "Batched"
}
201 Created
content-type: application/json
location: /issues/i1000

{
  "id": "i1000",
  "key": "ING-101",
  "title": "Batched",
  "description": null,
  "state": "TRIAGE",
  "priority": "MEDIUM",
  "estimate": null,
  "createdAt": "2026-02-01T12:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": null,
  "reporterId": "m01",
  "assigneeId": null,
  "labelIds": [],
... 6 more lines
Full response body
{
  "id": "i1000",
  "key": "ING-101",
  "title": "Batched",
  "description": null,
  "state": "TRIAGE",
  "priority": "MEDIUM",
  "estimate": null,
  "createdAt": "2026-02-01T12:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": null,
  "reporterId": "m01",
  "assigneeId": null,
  "labelIds": [],
  "parentId": null,
  "attachments": [],
  "externalState": null,
  "assignee": null,
  "labels": []
}
GET /projects/p1/board?limit=10
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "21981d5e6f4fb6c9"

{
  "project": {
    "id": "p1",
    "key": "ING",
    "name": "Ingest pipeline",
    "status": "ACTIVE",
    "startDate": "2026-01-05",
    "targetDate": "2026-03-15",
    "teamId": "t1",
    "leadId": "m01"
  },
  "columns": [
    {
      "state": "TRIAGE",
      "count": 21,
      "issues": [
... 2584 more lines
Full response body
{
  "project": {
    "id": "p1",
    "key": "ING",
    "name": "Ingest pipeline",
    "status": "ACTIVE",
    "startDate": "2026-01-05",
    "targetDate": "2026-03-15",
    "teamId": "t1",
    "leadId": "m01"
  },
  "columns": [
    {
      "state": "TRIAGE",
      "count": 21,
      "issues": [
        {
          "id": "i1000",
          "key": "ING-101",
          "title": "Batched",
          "description": null,
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2026-02-01T12:00:00.000Z",
          "updatedAt": "2026-02-01T12:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m01",
          "assigneeId": null,
          "labelIds": [],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": []
        },
        {
          "id": "i093",
          "key": "ING-93",
          "title": "Retry the retry budget in the Kotlin runtime",
          "description": "Fix policy pushdown.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T02:00:00.000Z",
          "updatedAt": "2025-12-11T18:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m09",
          "assigneeId": "m04",
          "labelIds": [
            "l01"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m04",
            "role": "MEMBER",
            "user": {
              "id": "u04",
              "name": "Katherine Johnson",
              "avatarUrl": null,
              "email": "katherine.johnson@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            }
          ]
        },
        {
          "id": "i086",
          "key": "ING-86",
          "title": "Remove schema reload after a redeploy",
          "description": "Cache cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-10T19:00:00.000Z",
          "updatedAt": "2025-12-12T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m12",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i085",
          "key": "ING-85",
          "title": "Remove schema reload for offline clients",
          "description": "Cache the idempotency store.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 3,
          "createdAt": "2025-12-10T18:00:00.000Z",
          "updatedAt": "2025-12-11T01:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m07",
          "assigneeId": "m08",
          "labelIds": [
            "l01",
            "l05",
            "l10"
          ],
          "parentId": "i080",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i076",
          "key": "ING-76",
          "title": "Fix cold starts on reconnect",
          "description": "Cache schema reload.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 3,
          "createdAt": "2025-12-10T09:00:00.000Z",
          "updatedAt": "2025-12-11T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m07",
          "labelIds": [
            "l07",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i075",
          "key": "ING-75",
          "title": "Document the retry budget on reconnect",
          "description": "Remove the shape registry.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 5,
          "createdAt": "2025-12-10T08:00:00.000Z",
          "updatedAt": "2025-12-11T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m04",
          "assigneeId": "m10",
          "labelIds": [
            "l01",
            "l07",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i070",
          "key": "ING-70",
          "title": "Document schema reload for large pages",
          "description": "Retry policy pushdown.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-10T03:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m04",
          "labelIds": [
            "l05",
            "l07"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-070.json",
              "contentType": "application/json",
              "size": 378856,
              "url": "https://files.example.com/trace-070.json"
            }
          ],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m04",
            "role": "MEMBER",
            "user": {
              "id": "u04",
              "name": "Katherine Johnson",
              "avatarUrl": null,
              "email": "katherine.johnson@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i052",
          "key": "ING-52",
          "title": "Document cold starts for offline clients",
          "description": "Measure cold starts.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 5,
          "createdAt": "2025-12-09T09:00:00.000Z",
          "updatedAt": "2025-12-10T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m08",
          "assigneeId": "m12",
          "labelIds": [
            "l03",
            "l06",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i047",
          "key": "ING-47",
          "title": "Fix keep-alives after a redeploy",
          "description": "Document keep-alives.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-09T04:00:00.000Z",
          "updatedAt": "2025-12-10T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m11",
          "labelIds": [
            "l02",
            "l06",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m11",
            "role": "MEMBER",
            "user": {
              "id": "u11",
              "name": "Anita Borg",
              "avatarUrl": "https://avatars.example.com/u11.png",
              "email": "anita.borg@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i046",
          "key": "ING-46",
          "title": "Retry keep-alives for large pages",
          "description": "Harden the WebSocket transport.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": 5,
          "createdAt": "2025-12-09T03:00:00.000Z",
          "updatedAt": "2025-12-09T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m09",
          "labelIds": [
            "l06",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        }
      ]
    },
    {
      "state": "BACKLOG",
      "count": 15,
      "issues": [
        {
          "id": "i094",
          "key": "ING-94",
          "title": "Retry keep-alives behind a proxy",
          "description": "Fix the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "MEDIUM",
          "estimate": 2,
          "createdAt": "2025-12-11T03:00:00.000Z",
          "updatedAt": "2025-12-11T17:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m03",
          "labelIds": [
            "l04"
          ],
          "parentId": "i093",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i092",
          "key": "ING-92",
          "title": "Refactor the WebSocket transport after a redeploy",
          "description": "Document the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 1,
          "createdAt": "2025-12-11T01:00:00.000Z",
          "updatedAt": "2025-12-12T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": "m06",
          "labelIds": [
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m06",
            "role": "MEMBER",
            "user": {
              "id": "u06",
              "name": "Edsger Dijkstra",
              "avatarUrl": "https://avatars.example.com/u06.png",
              "email": "edsger.dijkstra@acme.example"
            }
          },
          "labels": [
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i089",
          "key": "ING-89",
          "title": "Document cold starts for large pages",
          "description": "Fix the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "MEDIUM",
          "estimate": 2,
          "createdAt": "2025-12-10T22:00:00.000Z",
          "updatedAt": "2025-12-12T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i083",
          "key": "ING-83",
          "title": "Document the retry budget under load",
          "description": "Add policy pushdown.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-10T16:00:00.000Z",
          "updatedAt": "2025-12-11T03:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": "m12",
          "labelIds": [
            "l01",
            "l03",
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i079",
          "key": "ING-79",
          "title": "Remove cursor pagination behind a proxy",
          "description": "Measure the shape registry.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-10T12:00:00.000Z",
          "updatedAt": "2025-12-12T03:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l10"
          ],
          "parentId": "i072",
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i071",
          "key": "ING-71",
          "title": "Remove the idempotency store behind a proxy",
          "description": "Remove schema reload.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 2,
          "createdAt": "2025-12-10T04:00:00.000Z",
          "updatedAt": "2025-12-10T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m01",
          "assigneeId": "m12",
          "labelIds": [],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": []
        },
        {
          "id": "i069",
          "key": "ING-69",
          "title": "Retry the batch planner after a redeploy",
          "description": "Fix the WebSocket transport.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 3,
          "createdAt": "2025-12-10T02:00:00.000Z",
          "updatedAt": "2025-12-11T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i055",
          "key": "ING-55",
          "title": "Harden the retry budget for offline clients",
          "description": "Cache the retry budget.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 5,
          "createdAt": "2025-12-09T12:00:00.000Z",
          "updatedAt": "2025-12-10T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m08",
          "labelIds": [
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i041",
          "key": "ING-41",
          "title": "Investigate the shape registry under load",
          "description": "Remove cursor pagination.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 5,
          "createdAt": "2025-12-08T22:00:00.000Z",
          "updatedAt": "2025-12-10T10:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i040",
          "key": "ING-40",
          "title": "Document schema reload in the Kotlin runtime",
          "description": "Refactor schema reload.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "URGENT",
          "estimate": 5,
          "createdAt": "2025-12-08T21:00:00.000Z",
          "updatedAt": "2025-12-09T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m07",
          "assigneeId": "m12",
          "labelIds": [
            "l06",
            "l09"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-040.json",
              "contentType": "application/json",
              "size": 201090,
              "url": "https://files.example.com/trace-040.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        }
      ]
    },
    {
      "state": "TODO",
      "count": 9,
      "issues": [
        {
          "id": "i078",
          "key": "ING-78",
          "title": "Refactor the WebSocket transport on reconnect",
          "description": "Fix the shape registry.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": 1,
          "createdAt": "2025-12-10T11:00:00.000Z",
          "updatedAt": "2025-12-10T11:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m12",
          "assigneeId": "m02",
          "labelIds": [
            "l04",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i077",
          "key": "ING-77",
          "title": "Remove the batch planner for large pages",
          "description": "Measure the idempotency store.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "MEDIUM",
          "estimate": 3,
          "createdAt": "2025-12-10T10:00:00.000Z",
          "updatedAt": "2025-12-11T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m12",
          "assigneeId": null,
          "labelIds": [
            "l01",
            "l07",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": null,
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i066",
          "key": "ING-66",
          "title": "Retry the idempotency store under load",
          "description": "Cache cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-09T23:00:00.000Z",
          "updatedAt": "2025-12-10T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m12",
          "assigneeId": "m09",
          "labelIds": [
            "l03"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            }
          ]
        },
        {
          "id": "i049",
          "key": "ING-49",
          "title": "Refactor policy pushdown on reconnect",
          "description": "Remove schema reload.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "MEDIUM",
          "estimate": 8,
          "createdAt": "2025-12-09T06:00:00.000Z",
          "updatedAt": "2025-12-10T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m02",
          "assigneeId": "m08",
          "labelIds": [
            "l01",
            "l06",
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i038",
          "key": "ING-38",
          "title": "Document schema reload on slow networks",
          "description": "Remove the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "LOW",
          "estimate": 1,
          "createdAt": "2025-12-08T19:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m12",
          "assigneeId": "m06",
          "labelIds": [
            "l01",
            "l03",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m06",
            "role": "MEMBER",
            "user": {
              "id": "u06",
              "name": "Edsger Dijkstra",
              "avatarUrl": "https://avatars.example.com/u06.png",
              "email": "edsger.dijkstra@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i037",
          "key": "ING-37",
          "title": "Remove policy pushdown for large pages",
          "description": "Document the batch planner.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-08T18:00:00.000Z",
          "updatedAt": "2025-12-09T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": "m10",
          "labelIds": [
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i036",
          "key": "ING-36",
          "title": "Fix policy pushdown behind a proxy",
          "description": "Add cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-08T17:00:00.000Z",
          "updatedAt": "2025-12-10T05:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m12",
          "assigneeId": "m09",
          "labelIds": [],
          "parentId": "i026",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": []
        },
        {
          "id": "i028",
          "key": "ING-28",
          "title": "Retry the shape registry in the Kotlin runtime",
          "description": "Refactor cursor pagination.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "URGENT",
          "estimate": 8,
          "createdAt": "2025-12-08T09:00:00.000Z",
          "updatedAt": "2025-12-08T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": "m12",
          "labelIds": [
            "l02",
            "l03",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i025",
          "key": "ING-25",
          "title": "Fix policy pushdown under load",
          "description": "Measure the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-08T06:00:00.000Z",
          "updatedAt": "2025-12-09T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m04",
          "assigneeId": "m08",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        }
      ]
    },
    {
      "state": "IN_PROGRESS",
      "count": 17,
      "issues": [
        {
          "id": "i100",
          "key": "ING-100",
          "title": "Document the batch planner under load",
          "description": "Document the retry budget.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-11T09:00:00.000Z",
          "updatedAt": "2025-12-12T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m03",
          "assigneeId": "m03",
          "labelIds": [
            "l05",
            "l08"
          ],
          "parentId": "i098",
          "attachments": [
            {
              "filename": "trace-100.json",
              "contentType": "application/json",
              "size": 402342,
              "url": "https://files.example.com/trace-100.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i090",
          "key": "ING-90",
          "title": "Investigate keep-alives on reconnect",
          "description": "Harden the retry budget.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "URGENT",
          "estimate": 5,
          "createdAt": "2025-12-10T23:00:00.000Z",
          "updatedAt": "2025-12-12T00:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m07",
          "assigneeId": null,
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-090.json",
              "contentType": "application/json",
              "size": 255690,
              "url": "https://files.example.com/trace-090.json"
            }
          ],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i067",
          "key": "ING-67",
          "title": "Harden the batch planner behind a proxy",
          "description": "Fix the retry budget.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "MEDIUM",
          "estimate": 13,
          "createdAt": "2025-12-10T00:00:00.000Z",
          "updatedAt": "2025-12-10T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m12",
          "labelIds": [
            "l09",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i065",
          "key": "ING-65",
          "title": "Measure the batch planner on reconnect",
          "description": "Fix policy pushdown.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-09T22:00:00.000Z",
          "updatedAt": "2025-12-10T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m01",
          "labelIds": [
            "l02",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i064",
          "key": "ING-64",
          "title": "Remove keep-alives in the Kotlin runtime",
          "description": "Document keep-alives.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-09T21:00:00.000Z",
          "updatedAt": "2025-12-10T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m04",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l05",
            "l06"
          ],
          "parentId": "i056",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i061",
          "key": "ING-61",
          "title": "Retry keep-alives on reconnect",
          "description": "Measure the batch planner.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "HIGH",
          "estimate": 3,
          "createdAt": "2025-12-09T18:00:00.000Z",
          "updatedAt": "2025-12-09T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m08",
          "assigneeId": "m08",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i058",
          "key": "ING-58",
          "title": "Refactor the batch planner for large pages",
          "description": "Refactor cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-09T15:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m08",
          "assigneeId": "m07",
          "labelIds": [
            "l02",
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i050",
          "key": "ING-50",
          "title": "Refactor policy pushdown for large pages",
          "description": "Add the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "HIGH",
          "estimate": 1,
          "createdAt": "2025-12-09T07:00:00.000Z",
          "updatedAt": "2025-12-09T10:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m05",
          "assigneeId": "m02",
          "labelIds": [
            "l04",
            "l08",
            "l10"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-050.json",
              "contentType": "application/json",
              "size": 362494,
              "url": "https://files.example.com/trace-050.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i030",
          "key": "ING-30",
          "title": "Fix cursor pagination for large pages",
          "description": "Harden keep-alives.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-08T11:00:00.000Z",
          "updatedAt": "2025-12-09T12:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m09",
          "assigneeId": "m02",
          "labelIds": [
            "l02",
            "l04"
          ],
          "parentId": "i023",
          "attachments": [
            {
              "filename": "trace-030.json",
              "contentType": "application/json",
              "size": 141270,
              "url": "https://files.example.com/trace-030.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i026",
          "key": "ING-26",
          "title": "Retry keep-alives on reconnect",
          "description": "Remove the idempotency store.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "NONE",
          "estimate": 2,
          "createdAt": "2025-12-08T07:00:00.000Z",
          "updatedAt": "2025-12-09T00:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m10",
          "assigneeId": "m03",
          "labelIds": [
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        }
      ]
    },
    {
      "state": "IN_REVIEW",
      "count": 9,
      "issues": [
        {
          "id": "i091",
          "key": "ING-91",
          "title": "Refactor the retry budget after a redeploy",
          "description": "Cache the idempotency store.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T00:00:00.000Z",
          "updatedAt": "2025-12-12T04:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m01",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i087",
          "key": "ING-87",
          "title": "Measure the WebSocket transport for offline clients",
          "description": "Cache the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "NONE",
          "estimate": 13,
          "createdAt": "2025-12-10T20:00:00.000Z",
          "updatedAt": "2025-12-11T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l05",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i082",
          "key": "ING-82",
          "title": "Retry the WebSocket transport in the Kotlin runtime",
          "description": "Refactor policy pushdown.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-10T15:00:00.000Z",
          "updatedAt": "2025-12-10T19:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l04",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i072",
          "key": "ING-72",
          "title": "Investigate policy pushdown for offline clients",
          "description": "Refactor the retry budget.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "MEDIUM",
          "estimate": 3,
          "createdAt": "2025-12-10T05:00:00.000Z",
          "updatedAt": "2025-12-10T20:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m10",
          "labelIds": [
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i063",
          "key": "ING-63",
          "title": "Retry the batch planner for large pages",
          "description": "Add schema reload.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-09T20:00:00.000Z",
          "updatedAt": "2025-12-10T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m11",
          "assigneeId": "m08",
          "labelIds": [
            "l05",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i060",
          "key": "ING-60",
          "title": "Measure cold starts under load",
          "description": "Refactor policy pushdown.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-09T17:00:00.000Z",
          "updatedAt": "2025-12-10T01:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": "m01",
          "labelIds": [
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-060.json",
              "contentType": "application/json",
              "size": 301630,
              "url": "https://files.example.com/trace-060.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i054",
          "key": "ING-54",
          "title": "Measure the idempotency store in the Kotlin runtime",
          "description": "Harden cold starts.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-09T11:00:00.000Z",
          "updatedAt": "2025-12-10T23:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m08",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l05",
            "l07"
          ],
          "parentId": "i050",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i016",
          "key": "ING-16",
          "title": "Measure the shape registry on slow networks",
          "description": "Harden the batch planner.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 8,
          "createdAt": "2025-12-07T21:00:00.000Z",
          "updatedAt": "2025-12-08T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m05",
          "assigneeId": "m10",
          "labelIds": [
            "l01",
            "l02"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            }
          ]
        },
        {
          "id": "i010",
          "key": "ING-10",
          "title": "Refactor cursor pagination on reconnect",
          "description": "Fix the WebSocket transport.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "URGENT",
          "estimate": 3,
          "createdAt": "2025-12-07T15:00:00.000Z",
          "updatedAt": "2025-12-07T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m08",
          "assigneeId": "m05",
          "labelIds": [
            "l02",
            "l08"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-010.json",
              "contentType": "application/json",
              "size": 366443,
              "url": "https://files.example.com/trace-010.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m05",
            "role": "MEMBER",
            "user": {
              "id": "u05",
              "name": "Barbara Liskov",
              "avatarUrl": "https://avatars.example.com/u05.png",
              "email": "barbara.liskov@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        }
      ]
    },
    {
      "state": "DONE",
      "count": 15,
      "issues": [
        {
          "id": "i098",
          "key": "ING-98",
          "title": "Investigate policy pushdown behind a proxy",
          "description": "Add cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-11T07:00:00.000Z",
          "updatedAt": "2025-12-11T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": null,
          "labelIds": [],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": null,
          "labels": []
        },
        {
          "id": "i097",
          "key": "ING-97",
          "title": "Refactor the idempotency store on slow networks",
          "description": "Refactor the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T06:00:00.000Z",
          "updatedAt": "2025-12-11T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m10",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i096",
          "key": "ING-96",
          "title": "Add cursor pagination behind a proxy",
          "description": "Remove keep-alives.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-11T05:00:00.000Z",
          "updatedAt": "2025-12-12T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": null,
          "labelIds": [
            "l04",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i095",
          "key": "ING-95",
          "title": "Document the retry budget for large pages",
          "description": "Measure keep-alives.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-11T04:00:00.000Z",
          "updatedAt": "2025-12-11T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m09",
          "assigneeId": null,
          "labelIds": [
            "l02",
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i088",
          "key": "ING-88",
          "title": "Remove schema reload for large pages",
          "description": "Retry keep-alives.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "URGENT",
          "estimate": null,
          "createdAt": "2025-12-10T21:00:00.000Z",
          "updatedAt": "2025-12-11T12:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m03",
          "labelIds": [
            "l01",
            "l05",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i081",
          "key": "ING-81",
          "title": "Add the idempotency store for offline clients",
          "description": "Add schema reload.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-10T14:00:00.000Z",
          "updatedAt": "2025-12-11T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m06",
          "assigneeId": "m01",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i073",
          "key": "ING-73",
          "title": "Document policy pushdown for offline clients",
          "description": "Remove the WebSocket transport.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-10T06:00:00.000Z",
          "updatedAt": "2025-12-11T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m06",
          "assigneeId": "m10",
          "labelIds": [
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i068",
          "key": "ING-68",
          "title": "Measure keep-alives behind a proxy",
          "description": "Measure cold starts.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-10T01:00:00.000Z",
          "updatedAt": "2025-12-10T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m03",
          "labelIds": [
            "l04"
          ],
          "parentId": "i067",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i051",
          "key": "ING-51",
          "title": "Retry the shape registry for offline clients",
          "description": "Refactor cold starts.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-09T08:00:00.000Z",
          "updatedAt": "2025-12-10T23:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m06",
          "assigneeId": "m12",
          "labelIds": [
            "l02",
            "l03",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i048",
          "key": "ING-48",
          "title": "Cache schema reload for large pages",
          "description": "Investigate the retry budget.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "URGENT",
          "estimate": null,
          "createdAt": "2025-12-09T05:00:00.000Z",
          "updatedAt": "2025-12-10T20:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        }
      ]
    }
  ]
}
1 more request
GET /projects/p1/activity?limit=20
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "2527952d3ae49c3a"

{
  "items": [
    {
      "id": "a0192",
      "type": "SprintClosedActivity",
      "at": "2026-01-05T09:00:00.000Z",
      "actor": {
        "id": "m01",
        "role": "OWNER",
        "user": {
          "id": "u01",
          "name": "Ada Lovelace",
          "avatarUrl": null,
          "email": "ada.lovelace@acme.example"
        }
      },
... 409 more lines
Full response body
{
  "items": [
    {
      "id": "a0192",
      "type": "SprintClosedActivity",
      "at": "2026-01-05T09:00:00.000Z",
      "actor": {
        "id": "m01",
        "role": "OWNER",
        "user": {
          "id": "u01",
          "name": "Ada Lovelace",
          "avatarUrl": null,
          "email": "ada.lovelace@acme.example"
        }
      },
      "sprint": {
        "id": "s01",
        "name": "ING Sprint 1",
        "state": "CLOSED"
      },
      "completed": 14,
      "carriedOver": 3
    },
    {
      "id": "a0191",
      "type": "IssueCommented",
      "at": "2025-12-12T14:00:00.000Z",
      "actor": {
        "id": "m11",
        "role": "MEMBER",
        "user": {
          "id": "u11",
          "name": "Anita Borg",
          "avatarUrl": "https://avatars.example.com/u11.png",
          "email": "anita.borg@acme.example"
        }
      },
      "comment": {
        "id": "c0148",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-12T14:00:00.000Z"
      }
    },
    {
      "id": "a0190",
      "type": "IssueMovedActivity",
      "at": "2025-12-12T14:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "issue": {
        "id": "i100",
        "key": "ING-100",
        "title": "Document the batch planner under load"
      },
      "from": "TODO",
      "to": "IN_PROGRESS"
    },
    {
      "id": "a0174",
      "type": "IssueCommented",
      "at": "2025-12-12T09:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "comment": {
        "id": "c0136",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-12T09:00:00.000Z"
      }
    },
    {
      "id": "a0172",
      "type": "IssueMovedActivity",
      "at": "2025-12-12T04:00:00.000Z",
      "actor": {
        "id": "m08",
        "role": "MEMBER",
        "user": {
          "id": "u08",
          "name": "Tim Berners-Lee",
          "avatarUrl": "https://avatars.example.com/u08.png",
          "email": "tim.berners.lee@acme.example"
        }
      },
      "issue": {
        "id": "i091",
        "key": "ING-91",
        "title": "Refactor the retry budget after a redeploy"
      },
      "from": "TODO",
      "to": "IN_REVIEW"
    },
    {
      "id": "a0182",
      "type": "IssueCommented",
      "at": "2025-12-12T02:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "comment": {
        "id": "c0142",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-12T02:00:00.000Z"
      }
    },
    {
      "id": "a0181",
      "type": "IssueMovedActivity",
      "at": "2025-12-12T02:00:00.000Z",
      "actor": {
        "id": "m07",
        "role": "MEMBER",
        "user": {
          "id": "u07",
          "name": "Radia Perlman",
          "avatarUrl": null,
          "email": "radia.perlman@acme.example"
        }
      },
      "issue": {
        "id": "i096",
        "key": "ING-96",
        "title": "Add cursor pagination behind a proxy"
      },
      "from": "TODO",
      "to": "DONE"
    },
    {
      "id": "a0161",
      "type": "IssueCommented",
      "at": "2025-12-12T02:00:00.000Z",
      "actor": {
        "id": "m05",
        "role": "MEMBER",
        "user": {
          "id": "u05",
          "name": "Barbara Liskov",
          "avatarUrl": "https://avatars.example.com/u05.png",
          "email": "barbara.liskov@acme.example"
        }
      },
      "comment": {
        "id": "c0127",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-12T02:00:00.000Z"
      }
    },
    {
      "id": "a0170",
      "type": "IssueCommented",
      "at": "2025-12-12T00:00:00.000Z",
      "actor": {
        "id": "m11",
        "role": "MEMBER",
        "user": {
          "id": "u11",
          "name": "Anita Borg",
          "avatarUrl": "https://avatars.example.com/u11.png",
          "email": "anita.borg@acme.example"
        }
      },
      "comment": {
        "id": "c0133",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-12T00:00:00.000Z"
      }
    },
    {
      "id": "a0169",
      "type": "IssueMovedActivity",
      "at": "2025-12-12T00:00:00.000Z",
      "actor": {
        "id": "m07",
        "role": "MEMBER",
        "user": {
          "id": "u07",
          "name": "Radia Perlman",
          "avatarUrl": null,
          "email": "radia.perlman@acme.example"
        }
      },
      "issue": {
        "id": "i090",
        "key": "ING-90",
        "title": "Investigate keep-alives on reconnect"
      },
      "from": "TODO",
      "to": "IN_PROGRESS"
    },
    {
      "id": "a0187",
      "type": "IssueCommented",
      "at": "2025-12-11T22:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "comment": {
        "id": "c0145",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-11T22:00:00.000Z"
      }
    },
    {
      "id": "a0186",
      "type": "IssueMovedActivity",
      "at": "2025-12-11T22:00:00.000Z",
      "actor": {
        "id": "m11",
        "role": "MEMBER",
        "user": {
          "id": "u11",
          "name": "Anita Borg",
          "avatarUrl": "https://avatars.example.com/u11.png",
          "email": "anita.borg@acme.example"
        }
      },
      "issue": {
        "id": "i098",
        "key": "ING-98",
        "title": "Investigate policy pushdown behind a proxy"
      },
      "from": "TODO",
      "to": "DONE"
    },
    {
      "id": "a0177",
      "type": "IssueCommented",
      "at": "2025-12-11T17:00:00.000Z",
      "actor": {
        "id": "m02",
        "role": "ADMIN",
        "user": {
          "id": "u02",
          "name": "Grace Hopper",
          "avatarUrl": "https://avatars.example.com/u02.png",
          "email": "grace.hopper@acme.example"
        }
      },
      "comment": {
        "id": "c0139",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-11T17:00:00.000Z"
      }
    },
    {
      "id": "a0152",
      "type": "IssueMovedActivity",
      "at": "2025-12-11T14:00:00.000Z",
      "actor": {
        "id": "m01",
        "role": "OWNER",
        "user": {
          "id": "u01",
          "name": "Ada Lovelace",
          "avatarUrl": null,
          "email": "ada.lovelace@acme.example"
        }
      },
      "issue": {
        "id": "i081",
        "key": "ING-81",
        "title": "Add the idempotency store for offline clients"
      },
      "from": "TODO",
      "to": "DONE"
    },
    {
      "id": "a0139",
      "type": "IssueMovedActivity",
      "at": "2025-12-11T14:00:00.000Z",
      "actor": {
        "id": "m10",
        "role": "MEMBER",
        "user": {
          "id": "u10",
          "name": "Vint Cerf",
          "avatarUrl": null,
          "email": "vint.cerf@acme.example"
        }
      },
      "issue": {
        "id": "i073",
        "key": "ING-73",
        "title": "Document policy pushdown for offline clients"
      },
      "from": "TODO",
      "to": "DONE"
    },
    {
      "id": "a0166",
      "type": "IssueCommented",
      "at": "2025-12-11T12:00:00.000Z",
      "actor": {
        "id": "m07",
        "role": "MEMBER",
        "user": {
          "id": "u07",
          "name": "Radia Perlman",
          "avatarUrl": null,
          "email": "radia.perlman@acme.example"
        }
      },
      "comment": {
        "id": "c0130",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-11T12:00:00.000Z"
      }
    },
    {
      "id": "a0165",
      "type": "IssueMovedActivity",
      "at": "2025-12-11T12:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "issue": {
        "id": "i088",
        "key": "ING-88",
        "title": "Remove schema reload for large pages"
      },
      "from": "TODO",
      "to": "DONE"
    },
    {
      "id": "a0141",
      "type": "IssueCommented",
      "at": "2025-12-11T12:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "comment": {
        "id": "c0109",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-11T12:00:00.000Z"
      }
    },
    {
      "id": "a0150",
      "type": "IssueCommented",
      "at": "2025-12-11T11:00:00.000Z",
      "actor": {
        "id": "m08",
        "role": "MEMBER",
        "user": {
          "id": "u08",
          "name": "Tim Berners-Lee",
          "avatarUrl": "https://avatars.example.com/u08.png",
          "email": "tim.berners.lee@acme.example"
        }
      },
      "comment": {
        "id": "c0118",
        "body": "Reproduced on the staging cluster.",
        "createdAt": "2025-12-11T11:00:00.000Z"
      }
    },
    {
      "id": "a0189",
      "type": "IssueOpened",
      "at": "2025-12-11T09:00:00.000Z",
      "actor": {
        "id": "m03",
        "role": "MEMBER",
        "user": {
          "id": "u03",
          "name": "Alan Turing",
          "avatarUrl": "https://avatars.example.com/u03.png",
          "email": "alan.turing@acme.example"
        }
      },
      "issue": {
        "id": "i100",
        "key": "ING-100",
        "title": "Document the batch planner under load"
      }
    }
  ],
  "cursor": "a0189",
  "hasMore": true,
  "total": 192
}

GraphQL 2 requests

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "mutation { createIssue(input: { projectId: \"p1\", title: \"Batched\" }) { id key } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "createIssue": {
      "id": "i1000",
      "key": "ING-101"
    }
  }
}
POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ board(projectId: \"p1\") { columns { state count } } activity(projectId: \"p1\", first: 20) { items { id at actor { user { name } } } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "board": {
      "columns": [
        {
          "state": "TRIAGE",
          "count": 21
        },
        {
          "state": "BACKLOG",
          "count": 15
        },
        {
          "state": "TODO",
          "count": 9
        },
... 200 more lines
Full response body
{
  "data": {
    "board": {
      "columns": [
        {
          "state": "TRIAGE",
          "count": 21
        },
        {
          "state": "BACKLOG",
          "count": 15
        },
        {
          "state": "TODO",
          "count": 9
        },
        {
          "state": "IN_PROGRESS",
          "count": 17
        },
        {
          "state": "IN_REVIEW",
          "count": 9
        },
        {
          "state": "DONE",
          "count": 15
        }
      ]
    },
    "activity": {
      "items": [
        {
          "id": "a0192",
          "at": "2026-01-05T09:00:00.000Z",
          "actor": {
            "user": {
              "name": "Ada Lovelace"
            }
          }
        },
        {
          "id": "a0191",
          "at": "2025-12-12T14:00:00.000Z",
          "actor": {
            "user": {
              "name": "Anita Borg"
            }
          }
        },
        {
          "id": "a0190",
          "at": "2025-12-12T14:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          }
        },
        {
          "id": "a0174",
          "at": "2025-12-12T09:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          }
        },
        {
          "id": "a0172",
          "at": "2025-12-12T04:00:00.000Z",
          "actor": {
            "user": {
              "name": "Tim Berners-Lee"
            }
          }
        },
        {
          "id": "a0182",
          "at": "2025-12-12T02:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          }
        },
        {
          "id": "a0181",
          "at": "2025-12-12T02:00:00.000Z",
          "actor": {
            "user": {
              "name": "Radia Perlman"
            }
          }
        },
        {
          "id": "a0161",
          "at": "2025-12-12T02:00:00.000Z",
          "actor": {
            "user": {
              "name": "Barbara Liskov"
            }
          }
        },
        {
          "id": "a0170",
          "at": "2025-12-12T00:00:00.000Z",
          "actor": {
            "user": {
              "name": "Anita Borg"
            }
          }
        },
        {
          "id": "a0169",
          "at": "2025-12-12T00:00:00.000Z",
          "actor": {
            "user": {
              "name": "Radia Perlman"
            }
          }
        },
        {
          "id": "a0187",
          "at": "2025-12-11T22:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          }
        },
        {
          "id": "a0186",
          "at": "2025-12-11T22:00:00.000Z",
          "actor": {
            "user": {
              "name": "Anita Borg"
            }
          }
        },
        {
          "id": "a0177",
          "at": "2025-12-11T17:00:00.000Z",
          "actor": {
            "user": {
              "name": "Grace Hopper"
            }
          }
        },
        {
          "id": "a0152",
          "at": "2025-12-11T14:00:00.000Z",
          "actor": {
            "user": {
              "name": "Ada Lovelace"
            }
          }
        },
        {
          "id": "a0139",
          "at": "2025-12-11T14:00:00.000Z",
          "actor": {
            "user": {
              "name": "Vint Cerf"
            }
          }
        },
        {
          "id": "a0166",
          "at": "2025-12-11T12:00:00.000Z",
          "actor": {
            "user": {
              "name": "Radia Perlman"
            }
          }
        },
        {
          "id": "a0165",
          "at": "2025-12-11T12:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          }
        },
        {
          "id": "a0141",
          "at": "2025-12-11T12:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          }
        },
        {
          "id": "a0150",
          "at": "2025-12-11T11:00:00.000Z",
          "actor": {
            "user": {
              "name": "Tim Berners-Lee"
            }
          }
        },
        {
          "id": "a0189",
          "at": "2025-12-11T09:00:00.000Z",
          "actor": {
            "user": {
              "name": "Alan Turing"
            }
          }
        }
      ]
    }
  }
}

Rayfold 1 request

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "createIssue",
      "args": {
        "input": {
          "projectId": "p1",
          "title": "Batched"
        }
      },
      "key": "ws-batch-0000001",
      "shape": "{ id key }"
    },
    {
      "id": 2,
... 19 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"ok":{"$type":"Issue","id":"i1000","key":"ING-101"},"patch":[{"set":"Issue:i1000","value":{"$type":"Issue","id":"i1000","key":"ING-101"}},{"invOp":["board","issues","activity"]}],"meta":{"cost":1},"fin":true}
{"id":2,"data":{"project":{"$type":"Project","key":"ING","name":"Ingest pipeline"},"columns":[{"state":"TRIAGE","count":20,"issues":{"items":[{"$type":"Issue","id":"i1000","key":"ING-101","title":"Batched","state":"TRIAGE","priority":"MEDIUM","updatedAt":"2026-02-01T12:00:01.000Z","assignee":null,"labels":[]},{"$type":"Issue","id":"i093","key":"ING-93","title":"Retry the retry budget in the Kotlin runtime","state":"TRIAGE","priority":"LOW","updatedAt":"2025-12-11T18:00:00.000Z","assignee":{"$type":"Member","id":"m04","role":"MEMBER","user":{"$type":"User","id":"u04","name":"Katherine Johnson","avatarUrl":null}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"}]},{"$type":"Issue","id":"i086","key":"ING-86","title":"Remove schema reload after a redeploy","state":"TRIAGE","priority":"URGENT","updatedAt":"2025-12-12T02:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i085","key":"ING-85","title":"Remove schema reload for offline clients","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-11T01:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i076","key":"ING-76","title":"Fix cold starts on reconnect","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-11T07:00:00.000Z","assignee":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i075","key":"ING-75","title":"Document the retry budget on reconnect","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-11T13:00:00.000Z","assignee":{"$type":"Member","id":"m10","role":"MEMBER","user":{"$type":"User","id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i070","key":"ING-70","title":"Document schema reload for large pages","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-10T06:00:00.000Z","assignee":{"$type":"Member","id":"m04","role":"MEMBER","user":{"$type":"User","id":"u04","name":"Katherine Johnson","avatarUrl":null}},"labels":[{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"}]},{"$type":"Issue","id":"i052","key":"ING-52","title":"Document cold starts for offline clients","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-10T16:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i047","key":"ING-47","title":"Fix keep-alives after a redeploy","state":"TRIAGE","priority":"MEDIUM","updatedAt":"2025-12-10T15:00:00.000Z","assignee":{"$type":"Member","id":"m11","role":"MEMBER","user":{"$type":"User","id":"u11","name":"Anita Borg","avatarUrl":"https://avatars.example.com/u11.png"}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i046","key":"ING-46","title":"Retry keep-alives for large pages","state":"TRIAGE","priority":"MEDIUM","updatedAt":"2025-12-09T13:00:00.000Z","assignee":{"$type":"Member","id":"m09","role":"MEMBER","user":{"$type":"User","id":"u09","name":"Margaret Hamilton","avatarUrl":"https://avatars.example.com/u09.png"}},"labels":[{"$type":"Label","id":"l06","name":"security","color":"#b60205"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]}]}},{"state":"BACKLOG","count":15,"issues":{"items":[{"$type":"Issue","id":"i094","key":"ING-94","title":"Retry keep-alives behind a proxy","state":"BACKLOG","priority":"MEDIUM","updatedAt":"2025-12-11T17:00:00.000Z","assignee":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i092","key":"ING-92","title":"Refactor the WebSocket transport after a redeploy","state":"BACKLOG","priority":"HIGH","updatedAt":"2025-12-12T09:00:00.000Z","assignee":{"$type":"Member","id":"m06","role":"MEMBER","user":{"$type":"User","id":"u06","name":"Edsger Dijkstra","avatarUrl":"https://avatars.example.com/u06.png"}},"labels":[{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"}]},{"$type":"Issue","id":"i089","key":"ING-89","title":"Document cold starts for large pages","state":"BACKLOG","priority":"MEDIUM","updatedAt":"2025-12-12T08:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i083","key":"ING-83","title":"Document the retry budget under load","state":"BACKLOG","priority":"LOW","updatedAt":"2025-12-11T03:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"}]},{"$type":"Issue","id":"i079","key":"ING-79","title":"Remove cursor pagination behind a proxy","state":"BACKLOG","priority":"NONE","updatedAt":"2025-12-12T03:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i071","key":"ING-71","title":"Remove the idempotency store behind a proxy","state":"BACKLOG","priority":"HIGH","updatedAt":"2025-12-10T08:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[]},{"$type":"Issue","id":"i069","key":"ING-69","title":"Retry the batch planner after a redeploy","state":"BACKLOG","priority":"HIGH","updatedAt":"2025-12-11T13:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i055","key":"ING-55","title":"Harden the retry budget for offline clients","state":"BACKLOG","priority":"LOW","updatedAt":"2025-12-10T08:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i041","key":"ING-41","title":"Investigate the shape registry under load","state":"BACKLOG","priority":"LOW","updatedAt":"2025-12-10T10:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i040","key":"ING-40","title":"Document schema reload in the Kotlin runtime","state":"BACKLOG","priority":"URGENT","updatedAt":"2025-12-09T16:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l06","name":"security","color":"#b60205"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]}]}},{"state":"TODO","count":9,"issues":{"items":[{"$type":"Issue","id":"i078","key":"ING-78","title":"Refactor the WebSocket transport on reconnect","state":"TODO","priority":"NONE","updatedAt":"2025-12-10T11:00:00.000Z","assignee":{"$type":"Member","id":"m02","role":"ADMIN","user":{"$type":"User","id":"u02","name":"Grace Hopper","avatarUrl":"https://avatars.example.com/u02.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i077","key":"ING-77","title":"Remove the batch planner for large pages","state":"TODO","priority":"MEDIUM","updatedAt":"2025-12-11T09:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i066","key":"ING-66","title":"Retry the idempotency store under load","state":"TODO","priority":"HIGH","updatedAt":"2025-12-10T22:00:00.000Z","assignee":{"$type":"Member","id":"m09","role":"MEMBER","user":{"$type":"User","id":"u09","name":"Margaret Hamilton","avatarUrl":"https://avatars.example.com/u09.png"}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"}]},{"$type":"Issue","id":"i049","key":"ING-49","title":"Refactor policy pushdown on reconnect","state":"TODO","priority":"MEDIUM","updatedAt":"2025-12-10T07:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"}]},{"$type":"Issue","id":"i038","key":"ING-38","title":"Document schema reload on slow networks","state":"TODO","priority":"LOW","updatedAt":"2025-12-10T06:00:00.000Z","assignee":{"$type":"Member","id":"m06","role":"MEMBER","user":{"$type":"User","id":"u06","name":"Edsger Dijkstra","avatarUrl":"https://avatars.example.com/u06.png"}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i037","key":"ING-37","title":"Remove policy pushdown for large pages","state":"TODO","priority":"LOW","updatedAt":"2025-12-09T15:00:00.000Z","assignee":{"$type":"Member","id":"m10","role":"MEMBER","user":{"$type":"User","id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i036","key":"ING-36","title":"Fix policy pushdown behind a proxy","state":"TODO","priority":"NONE","updatedAt":"2025-12-10T05:00:00.000Z","assignee":{"$type":"Member","id":"m09","role":"MEMBER","user":{"$type":"User","id":"u09","name":"Margaret Hamilton","avatarUrl":"https://avatars.example.com/u09.png"}},"labels":[]},{"$type":"Issue","id":"i028","key":"ING-28","title":"Retry the shape registry in the Kotlin runtime","state":"TODO","priority":"URGENT","updatedAt":"2025-12-08T16:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"}]},{"$type":"Issue","id":"i025","key":"ING-25","title":"Fix policy pushdown under load","state":"TODO","priority":"NONE","updatedAt":"2025-12-09T15:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]}]}},{"state":"IN_PROGRESS","count":17,"issues":{"items":[{"$type":"Issue","id":"i100","key":"ING-100","title":"Document the batch planner under load","state":"IN_PROGRESS","priority":"MEDIUM","updatedAt":"2025-12-12T14:00:00.000Z","assignee":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i090","key":"ING-90","title":"Investigate keep-alives on reconnect","state":"IN_PROGRESS","priority":"URGENT","updatedAt":"2025-12-12T00:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i067","key":"ING-67","title":"Harden the batch planner behind a proxy","state":"IN_PROGRESS","priority":"MEDIUM","updatedAt":"2025-12-10T09:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i065","key":"ING-65","title":"Measure the batch planner on reconnect","state":"IN_PROGRESS","priority":"NONE","updatedAt":"2025-12-10T22:00:00.000Z","assignee":{"$type":"Member","id":"m01","role":"OWNER","user":{"$type":"User","id":"u01","name":"Ada Lovelace","avatarUrl":null}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"}]},{"$type":"Issue","id":"i064","key":"ING-64","title":"Remove keep-alives in the Kotlin runtime","state":"IN_PROGRESS","priority":"URGENT","updatedAt":"2025-12-10T14:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i061","key":"ING-61","title":"Retry keep-alives on reconnect","state":"IN_PROGRESS","priority":"HIGH","updatedAt":"2025-12-09T22:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i058","key":"ING-58","title":"Refactor the batch planner for large pages","state":"IN_PROGRESS","priority":"LOW","updatedAt":"2025-12-10T06:00:00.000Z","assignee":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i050","key":"ING-50","title":"Refactor policy pushdown for large pages","state":"IN_PROGRESS","priority":"HIGH","updatedAt":"2025-12-09T10:00:00.000Z","assignee":{"$type":"Member","id":"m02","role":"ADMIN","user":{"$type":"User","id":"u02","name":"Grace Hopper","avatarUrl":"https://avatars.example.com/u02.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i030","key":"ING-30","title":"Fix cursor pagination for large pages","state":"IN_PROGRESS","priority":"LOW","updatedAt":"2025-12-09T12:00:00.000Z","assignee":{"$type":"Member","id":"m02","role":"ADMIN","user":{"$type":"User","id":"u02","name":"Grace Hopper","avatarUrl":"https://avatars.example.com/u02.png"}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i026","key":"ING-26","title":"Retry keep-alives on reconnect","state":"IN_PROGRESS","priority":"NONE","updatedAt":"2025-12-09T00:00:00.000Z","assignee":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]}]}},{"state":"IN_REVIEW","count":9,"issues":{"items":[{"$type":"Issue","id":"i091","key":"ING-91","title":"Refactor the retry budget after a redeploy","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-12T04:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i087","key":"ING-87","title":"Measure the WebSocket transport for offline clients","state":"IN_REVIEW","priority":"NONE","updatedAt":"2025-12-11T02:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i082","key":"ING-82","title":"Retry the WebSocket transport in the Kotlin runtime","state":"IN_REVIEW","priority":"HIGH","updatedAt":"2025-12-10T19:00:00.000Z","assignee":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i072","key":"ING-72","title":"Investigate policy pushdown for offline clients","state":"IN_REVIEW","priority":"MEDIUM","updatedAt":"2025-12-10T20:00:00.000Z","assignee":{"$type":"Member","id":"m10","role":"MEMBER","user":{"$type":"User","id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i063","key":"ING-63","title":"Retry the batch planner for large pages","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-10T07:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i060","key":"ING-60","title":"Measure cold starts under load","state":"IN_REVIEW","priority":"URGENT","updatedAt":"2025-12-10T01:00:00.000Z","assignee":{"$type":"Member","id":"m01","role":"OWNER","user":{"$type":"User","id":"u01","name":"Ada Lovelace","avatarUrl":null}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i054","key":"ING-54","title":"Measure the idempotency store in the Kotlin runtime","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-10T23:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"}]},{"$type":"Issue","id":"i016","key":"ING-16","title":"Measure the shape registry on slow networks","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-08T07:00:00.000Z","assignee":{"$type":"Member","id":"m10","role":"MEMBER","user":{"$type":"User","id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"}]},{"$type":"Issue","id":"i010","key":"ING-10","title":"Refactor cursor pagination on reconnect","state":"IN_REVIEW","priority":"URGENT","updatedAt":"2025-12-07T16:00:00.000Z","assignee":{"$type":"Member","id":"m05","role":"MEMBER","user":{"$type":"User","id":"u05","name":"Barbara Liskov","avatarUrl":"https://avatars.example.com/u05.png"}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]}]}},{"state":"DONE","count":15,"issues":{"items":[{"$type":"Issue","id":"i098","key":"ING-98","title":"Investigate policy pushdown behind a proxy","state":"DONE","priority":"HIGH","updatedAt":"2025-12-11T22:00:00.000Z","assignee":null,"labels":[]},{"$type":"Issue","id":"i097","key":"ING-97","title":"Refactor the idempotency store on slow networks","state":"DONE","priority":"LOW","updatedAt":"2025-12-11T07:00:00.000Z","assignee":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i096","key":"ING-96","title":"Add cursor pagination behind a proxy","state":"DONE","priority":"HIGH","updatedAt":"2025-12-12T02:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i095","key":"ING-95","title":"Document the retry budget for large pages","state":"DONE","priority":"MEDIUM","updatedAt":"2025-12-11T06:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i088","key":"ING-88","title":"Remove schema reload for large pages","state":"DONE","priority":"URGENT","updatedAt":"2025-12-11T12:00:00.000Z","assignee":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i081","key":"ING-81","title":"Add the idempotency store for offline clients","state":"DONE","priority":"HIGH","updatedAt":"2025-12-11T14:00:00.000Z","assignee":{"$type":"Member","id":"m01","role":"OWNER","user":{"$type":"User","id":"u01","name":"Ada Lovelace","avatarUrl":null}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i073","key":"ING-73","title":"Document policy pushdown for offline clients","state":"DONE","priority":"LOW","updatedAt":"2025-12-11T14:00:00.000Z","assignee":{"$type":"Member","id":"m10","role":"MEMBER","user":{"$type":"User","id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i068","key":"ING-68","title":"Measure keep-alives behind a proxy","state":"DONE","priority":"HIGH","updatedAt":"2025-12-10T16:00:00.000Z","assignee":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i051","key":"ING-51","title":"Retry the shape registry for offline clients","state":"DONE","priority":"HIGH","updatedAt":"2025-12-10T23:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"}]},{"$type":"Issue","id":"i048","key":"ING-48","title":"Cache schema reload for large pages","state":"DONE","priority":"URGENT","updatedAt":"2025-12-10T20:00:00.000Z","assignee":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]}]}}]},"meta":{"cost":49},"fin":true}
{"id":3,"data":{"items":[{"$type":"SprintClosedActivity","id":"a0192","at":"2026-01-05T09:00:00.000Z","actor":{"$type":"Member","id":"m01","role":"OWNER","user":{"$type":"User","id":"u01","name":"Ada Lovelace","avatarUrl":null}}},{"$type":"IssueCommented","id":"a0191","at":"2025-12-12T14:00:00.000Z","actor":{"$type":"Member","id":"m11","role":"MEMBER","user":{"$type":"User","id":"u11","name":"Anita Borg","avatarUrl":"https://avatars.example.com/u11.png"}}},{"$type":"IssueMovedActivity","id":"a0190","at":"2025-12-12T14:00:00.000Z","actor":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}}},{"$type":"IssueCommented","id":"a0174","at":"2025-12-12T09:00:00.000Z","actor":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}}},{"$type":"IssueMovedActivity","id":"a0172","at":"2025-12-12T04:00:00.000Z","actor":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}}},{"$type":"IssueCommented","id":"a0182","at":"2025-12-12T02:00:00.000Z","actor":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}}},{"$type":"IssueMovedActivity","id":"a0181","at":"2025-12-12T02:00:00.000Z","actor":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}}},{"$type":"IssueCommented","id":"a0161","at":"2025-12-12T02:00:00.000Z","actor":{"$type":"Member","id":"m05","role":"MEMBER","user":{"$type":"User","id":"u05","name":"Barbara Liskov","avatarUrl":"https://avatars.example.com/u05.png"}}},{"$type":"IssueCommented","id":"a0170","at":"2025-12-12T00:00:00.000Z","actor":{"$type":"Member","id":"m11","role":"MEMBER","user":{"$type":"User","id":"u11","name":"Anita Borg","avatarUrl":"https://avatars.example.com/u11.png"}}},{"$type":"IssueMovedActivity","id":"a0169","at":"2025-12-12T00:00:00.000Z","actor":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}}},{"$type":"IssueCommented","id":"a0187","at":"2025-12-11T22:00:00.000Z","actor":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}}},{"$type":"IssueMovedActivity","id":"a0186","at":"2025-12-11T22:00:00.000Z","actor":{"$type":"Member","id":"m11","role":"MEMBER","user":{"$type":"User","id":"u11","name":"Anita Borg","avatarUrl":"https://avatars.example.com/u11.png"}}},{"$type":"IssueCommented","id":"a0177","at":"2025-12-11T17:00:00.000Z","actor":{"$type":"Member","id":"m02","role":"ADMIN","user":{"$type":"User","id":"u02","name":"Grace Hopper","avatarUrl":"https://avatars.example.com/u02.png"}}},{"$type":"IssueMovedActivity","id":"a0152","at":"2025-12-11T14:00:00.000Z","actor":{"$type":"Member","id":"m01","role":"OWNER","user":{"$type":"User","id":"u01","name":"Ada Lovelace","avatarUrl":null}}},{"$type":"IssueMovedActivity","id":"a0139","at":"2025-12-11T14:00:00.000Z","actor":{"$type":"Member","id":"m10","role":"MEMBER","user":{"$type":"User","id":"u10","name":"Vint Cerf","avatarUrl":null}}},{"$type":"IssueCommented","id":"a0166","at":"2025-12-11T12:00:00.000Z","actor":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}}},{"$type":"IssueMovedActivity","id":"a0165","at":"2025-12-11T12:00:00.000Z","actor":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}}},{"$type":"IssueCommented","id":"a0141","at":"2025-12-11T12:00:00.000Z","actor":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}}},{"$type":"IssueCommented","id":"a0150","at":"2025-12-11T11:00:00.000Z","actor":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}}},{"$type":"IssueOpened","id":"a0189","at":"2025-12-11T09:00:00.000Z","actor":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}}}]},"meta":{"cost":66},"fin":true}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "createIssue",
      "args": {
        "input": {
          "projectId": "p1",
          "title": "Batched"
        }
      },
      "key": "ws-batch-0000001",
      "shape": "{ id key }"
    },
    {
      "id": 2,
      "op": "board",
      "args": {
        "projectId": "p1"
      },
      "shape": "{ project { key name } columns { state count issues(page: { first: 10 }) { items { ...Issue.row } } } }"
    },
    {
      "id": 3,
      "op": "activity",
      "args": {
        "projectId": "p1",
        "page": {
          "first": 20
        }
      },
      "shape": "{ items { id at actor { ...Member.default } } }"
    }
  ]
}

Lost update refused (two writers, one issue)

Level

Measured: what the losing writer receives (the losing writer gets the current row back (1 = yes), higher is better)

RESTREST: yes the losing writer gets the current row back (1 = yes)yesGraphQLGraphQL: no the losing writer gets the current row back (1 = yes)noRayfoldRayfold: yes the losing writer gets the current row back (1 = yes)yes
REST
412 with the current representation in the body, because this endpoint was written to include it
GraphQL
an error with a code and the current version number; the row itself needs another request
Rayfold
a typed `VersionConflict` carrying the current entity in the shape the op asked for, so the client can redraw and retry without a read

All three refuse the stale write. The difference is what the client has to do next.

See the real requests and responses (6)

REST 2 requests

PATCH /issues/i003
authorization: Bearer u01
content-type: application/json
if-match: "1"

{
  "title": "Renamed by the first writer"
}
200 OK
content-type: application/json
etag: "2"

{
  "id": "i003",
  "key": "ING-3",
  "title": "Renamed by the first writer",
  "description": "Harden keep-alives.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "DONE",
  "priority": "URGENT",
  "estimate": 2,
  "createdAt": "2025-12-07T08:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 2,
  "projectId": "p1",
  "sprintId": "s03",
  "reporterId": "m03",
  "assigneeId": "m01",
  "labelIds": [
... 29 more lines
Full response body
{
  "id": "i003",
  "key": "ING-3",
  "title": "Renamed by the first writer",
  "description": "Harden keep-alives.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "DONE",
  "priority": "URGENT",
  "estimate": 2,
  "createdAt": "2025-12-07T08:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 2,
  "projectId": "p1",
  "sprintId": "s03",
  "reporterId": "m03",
  "assigneeId": "m01",
  "labelIds": [
    "l03",
    "l04"
  ],
  "parentId": null,
  "attachments": [],
  "externalState": null,
  "assignee": {
    "id": "m01",
    "role": "OWNER",
    "user": {
      "id": "u01",
      "name": "Ada Lovelace",
      "avatarUrl": null,
      "email": "ada.lovelace@acme.example"
    }
  },
  "labels": [
    {
      "id": "l03",
      "name": "chore",
      "color": "#cfd3d7"
    },
    {
      "id": "l04",
      "name": "docs",
      "color": "#0075ca"
    }
  ]
}
PATCH /issues/i003
authorization: Bearer u01
content-type: application/json
if-match: "1"

{
  "title": "Renamed by the second writer"
}
412 Precondition Failed
content-type: application/problem+json

{
  "type": "https://example.com/errors/precondition_failed",
  "title": "precondition_failed",
  "status": 412,
  "detail": "Issue i003 is at version 2",
  "current": {
    "id": "i003",
    "key": "ING-3",
    "title": "Renamed by the first writer",
    "description": "Harden keep-alives.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
    "state": "DONE",
    "priority": "URGENT",
    "estimate": 2,
    "createdAt": "2025-12-07T08:00:00.000Z",
    "updatedAt": "2026-02-01T12:00:00.000Z",
    "version": 2,
... 35 more lines
Full response body
{
  "type": "https://example.com/errors/precondition_failed",
  "title": "precondition_failed",
  "status": 412,
  "detail": "Issue i003 is at version 2",
  "current": {
    "id": "i003",
    "key": "ING-3",
    "title": "Renamed by the first writer",
    "description": "Harden keep-alives.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
    "state": "DONE",
    "priority": "URGENT",
    "estimate": 2,
    "createdAt": "2025-12-07T08:00:00.000Z",
    "updatedAt": "2026-02-01T12:00:00.000Z",
    "version": 2,
    "projectId": "p1",
    "sprintId": "s03",
    "reporterId": "m03",
    "assigneeId": "m01",
    "labelIds": [
      "l03",
      "l04"
    ],
    "parentId": null,
    "attachments": [],
    "externalState": null,
    "assignee": {
      "id": "m01",
      "role": "OWNER",
      "user": {
        "id": "u01",
        "name": "Ada Lovelace",
        "avatarUrl": null,
        "email": "ada.lovelace@acme.example"
      }
    },
    "labels": [
      {
        "id": "l03",
        "name": "chore",
        "color": "#cfd3d7"
      },
      {
        "id": "l04",
        "name": "docs",
        "color": "#0075ca"
      }
    ]
  }
}

GraphQL 2 requests

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "mutation { updateIssue(id: \"i003\", patch: { title: \"Renamed by the first writer\" }, ifVersion: 1) { version } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "updateIssue": {
      "version": 2
    }
  }
}
POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "mutation { updateIssue(id: \"i003\", patch: { title: \"Renamed by the second writer\" }, ifVersion: 1) { version } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "errors": [
    {
      "message": "Issue i003 is at version 2",
      "locations": [
        {
          "line": 1,
          "column": 12
        }
      ],
      "path": [
        "updateIssue"
      ],
      "extensions": {
        "code": "CONFLICT",
        "actual": 2
... 5 more lines
Full response body
{
  "errors": [
    {
      "message": "Issue i003 is at version 2",
      "locations": [
        {
          "line": 1,
          "column": 12
        }
      ],
      "path": [
        "updateIssue"
      ],
      "extensions": {
        "code": "CONFLICT",
        "actual": 2
      }
    }
  ],
  "data": null
}

Rayfold 2 requests

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "updateIssue",
      "args": {
        "id": "i003",
        "patch": {
          "title": "Renamed by the first writer"
        }
      },
      "key": "ws-edit-00000001",
      "ifVersion": 1,
      "shape": "{ version }"
    }
  ]
... 1 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "$type": "Issue",
    "version": 2
  },
  "patch": [],
  "meta": {
    "cost": 1
  },
  "fin": true
}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "updateIssue",
      "args": {
        "id": "i003",
        "patch": {
          "title": "Renamed by the first writer"
        }
      },
      "key": "ws-edit-00000001",
      "ifVersion": 1,
      "shape": "{ version }"
    }
  ]
}
POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "updateIssue",
      "args": {
        "id": "i003",
        "patch": {
          "title": "Renamed by the second writer"
        }
      },
      "key": "ws-edit-00000002",
      "ifVersion": 1,
      "shape": "{ key title version }"
    }
  ]
... 1 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "error": {
    "code": "failed_precondition",
    "message": "Issue:i003 is at version 2, not 1",
    "type": "VersionConflict",
    "data": {
      "key": "Issue:i003",
      "expected": 1,
      "actual": 2,
      "current": {
        "$type": "Issue",
        "key": "ING-3",
        "title": "Renamed by the first writer",
        "version": 2
      }
... 4 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "updateIssue",
      "args": {
        "id": "i003",
        "patch": {
          "title": "Renamed by the second writer"
        }
      },
      "key": "ws-edit-00000002",
      "ifVersion": 1,
      "shape": "{ key title version }"
    }
  ]
}
Full response body
{
  "id": 1,
  "error": {
    "code": "failed_precondition",
    "message": "Issue:i003 is at version 2, not 1",
    "type": "VersionConflict",
    "data": {
      "key": "Issue:i003",
      "expected": 1,
      "actual": 2,
      "current": {
        "$type": "Issue",
        "key": "ING-3",
        "title": "Renamed by the first writer",
        "version": 2
      }
    }
  },
  "fin": true
}

Bulk write: closing a sprint

Rayfold ahead

Measured: what the client learns from the write (changed rows the write itself reports, higher is better)

RESTREST: 0 changed rows the write itself reports0GraphQLGraphQL: 0 changed rows the write itself reports0RayfoldRayfold: 11 changed rows the write itself reports11
REST
the new sprint state. Which of the cached issues moved is not said, so the client refetches the lists it holds
GraphQL
whatever the mutation selected. A mutation cannot describe rows it did not return, so the client refetches
Rayfold
11 entity patches plus the sprint, in the command's own answer: every cached screen holding those issues is corrected with no further request

The sprint held 11 unfinished issues. Patches are part of every command's answer, not something the server was asked for.

See the real requests and responses (4)

REST 2 requests

GET /issues?sprintId=s02&limit=50
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "8731f3874012efae"

{
  "items": [
    {
      "id": "i097",
      "key": "ING-97",
      "title": "Refactor the idempotency store on slow networks",
      "description": "Refactor the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "DONE",
      "priority": "LOW",
      "estimate": null,
      "createdAt": "2025-12-11T06:00:00.000Z",
      "updatedAt": "2025-12-11T07:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m10",
... 897 more lines
Full response body
{
  "items": [
    {
      "id": "i097",
      "key": "ING-97",
      "title": "Refactor the idempotency store on slow networks",
      "description": "Refactor the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "DONE",
      "priority": "LOW",
      "estimate": null,
      "createdAt": "2025-12-11T06:00:00.000Z",
      "updatedAt": "2025-12-11T07:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m10",
      "assigneeId": "m07",
      "labelIds": [
        "l03",
        "l10"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": {
        "id": "m07",
        "role": "MEMBER",
        "user": {
          "id": "u07",
          "name": "Radia Perlman",
          "avatarUrl": null,
          "email": "radia.perlman@acme.example"
        }
      },
      "labels": [
        {
          "id": "l03",
          "name": "chore",
          "color": "#cfd3d7"
        },
        {
          "id": "l10",
          "name": "regression",
          "color": "#e99695"
        }
      ]
    },
    {
      "id": "i096",
      "key": "ING-96",
      "title": "Add cursor pagination behind a proxy",
      "description": "Remove keep-alives.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "DONE",
      "priority": "HIGH",
      "estimate": 5,
      "createdAt": "2025-12-11T05:00:00.000Z",
      "updatedAt": "2025-12-12T02:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m07",
      "assigneeId": null,
      "labelIds": [
        "l04",
        "l08",
        "l09"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": null,
      "labels": [
        {
          "id": "l04",
          "name": "docs",
          "color": "#0075ca"
        },
        {
          "id": "l08",
          "name": "infra",
          "color": "#5319e7"
        },
        {
          "id": "l09",
          "name": "flaky",
          "color": "#fbca04"
        }
      ]
    },
    {
      "id": "i095",
      "key": "ING-95",
      "title": "Document the retry budget for large pages",
      "description": "Measure keep-alives.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "DONE",
      "priority": "MEDIUM",
      "estimate": null,
      "createdAt": "2025-12-11T04:00:00.000Z",
      "updatedAt": "2025-12-11T06:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m09",
      "assigneeId": null,
      "labelIds": [
        "l02",
        "l05",
        "l06"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": null,
      "labels": [
        {
          "id": "l02",
          "name": "feature",
          "color": "#0e8a16"
        },
        {
          "id": "l05",
          "name": "performance",
          "color": "#a2eeef"
        },
        {
          "id": "l06",
          "name": "security",
          "color": "#b60205"
        }
      ]
    },
    {
      "id": "i081",
      "key": "ING-81",
      "title": "Add the idempotency store for offline clients",
      "description": "Add schema reload.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "DONE",
      "priority": "HIGH",
      "estimate": null,
      "createdAt": "2025-12-10T14:00:00.000Z",
      "updatedAt": "2025-12-11T14:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m06",
      "assigneeId": "m01",
      "labelIds": [
        "l04"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": {
        "id": "m01",
        "role": "OWNER",
        "user": {
          "id": "u01",
          "name": "Ada Lovelace",
          "avatarUrl": null,
          "email": "ada.lovelace@acme.example"
        }
      },
      "labels": [
        {
          "id": "l04",
          "name": "docs",
          "color": "#0075ca"
        }
      ]
    },
    {
      "id": "i077",
      "key": "ING-77",
      "title": "Remove the batch planner for large pages",
      "description": "Measure the idempotency store.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "TODO",
      "priority": "MEDIUM",
      "estimate": 3,
      "createdAt": "2025-12-10T10:00:00.000Z",
      "updatedAt": "2025-12-11T09:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m12",
      "assigneeId": null,
      "labelIds": [
        "l01",
        "l07",
        "l08"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": "SYNCED",
      "assignee": null,
      "labels": [
        {
          "id": "l01",
          "name": "bug",
          "color": "#d73a4a"
        },
        {
          "id": "l07",
          "name": "ux",
          "color": "#d4c5f9"
        },
        {
          "id": "l08",
          "name": "infra",
          "color": "#5319e7"
        }
      ]
    },
    {
      "id": "i074",
      "key": "ING-74",
      "title": "Remove the idempotency store behind a proxy",
      "description": "Refactor the retry budget.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "CANCELLED",
      "priority": "MEDIUM",
      "estimate": 13,
      "createdAt": "2025-12-10T07:00:00.000Z",
      "updatedAt": "2025-12-11T12:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m06",
      "assigneeId": "m04",
      "labelIds": [
        "l03",
        "l09",
        "l10"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": {
        "id": "m04",
        "role": "MEMBER",
        "user": {
          "id": "u04",
          "name": "Katherine Johnson",
          "avatarUrl": null,
          "email": "katherine.johnson@acme.example"
        }
      },
      "labels": [
        {
          "id": "l03",
          "name": "chore",
          "color": "#cfd3d7"
        },
        {
          "id": "l09",
          "name": "flaky",
          "color": "#fbca04"
        },
        {
          "id": "l10",
          "name": "regression",
          "color": "#e99695"
        }
      ]
    },
    {
      "id": "i063",
      "key": "ING-63",
      "title": "Retry the batch planner for large pages",
      "description": "Add schema reload.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "IN_REVIEW",
      "priority": "LOW",
      "estimate": 3,
      "createdAt": "2025-12-09T20:00:00.000Z",
      "updatedAt": "2025-12-10T07:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m11",
      "assigneeId": "m08",
      "labelIds": [
        "l05",
        "l09"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": "SYNCED",
      "assignee": {
        "id": "m08",
        "role": "MEMBER",
        "user": {
          "id": "u08",
          "name": "Tim Berners-Lee",
          "avatarUrl": "https://avatars.example.com/u08.png",
          "email": "tim.berners.lee@acme.example"
        }
      },
      "labels": [
        {
          "id": "l05",
          "name": "performance",
          "color": "#a2eeef"
        },
        {
          "id": "l09",
          "name": "flaky",
          "color": "#fbca04"
        }
      ]
    },
    {
      "id": "i060",
      "key": "ING-60",
      "title": "Measure cold starts under load",
      "description": "Refactor policy pushdown.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "IN_REVIEW",
      "priority": "URGENT",
      "estimate": 2,
      "createdAt": "2025-12-09T17:00:00.000Z",
      "updatedAt": "2025-12-10T01:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m07",
      "assigneeId": "m01",
      "labelIds": [
        "l03",
        "l08"
      ],
      "parentId": null,
      "attachments": [
        {
          "filename": "trace-060.json",
          "contentType": "application/json",
          "size": 301630,
          "url": "https://files.example.com/trace-060.json"
        }
      ],
      "externalState": null,
      "assignee": {
        "id": "m01",
        "role": "OWNER",
        "user": {
          "id": "u01",
          "name": "Ada Lovelace",
          "avatarUrl": null,
          "email": "ada.lovelace@acme.example"
        }
      },
      "labels": [
        {
          "id": "l03",
          "name": "chore",
          "color": "#cfd3d7"
        },
        {
          "id": "l08",
          "name": "infra",
          "color": "#5319e7"
        }
      ]
    },
    {
      "id": "i058",
      "key": "ING-58",
      "title": "Refactor the batch planner for large pages",
      "description": "Refactor cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "IN_PROGRESS",
      "priority": "LOW",
      "estimate": null,
      "createdAt": "2025-12-09T15:00:00.000Z",
      "updatedAt": "2025-12-10T06:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m08",
      "assigneeId": "m07",
      "labelIds": [
        "l02",
        "l03",
        "l08"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": {
        "id": "m07",
        "role": "MEMBER",
        "user": {
          "id": "u07",
          "name": "Radia Perlman",
          "avatarUrl": null,
          "email": "radia.perlman@acme.example"
        }
      },
      "labels": [
        {
          "id": "l02",
          "name": "feature",
          "color": "#0e8a16"
        },
        {
          "id": "l03",
          "name": "chore",
          "color": "#cfd3d7"
        },
        {
          "id": "l08",
          "name": "infra",
          "color": "#5319e7"
        }
      ]
    },
    {
      "id": "i054",
      "key": "ING-54",
      "title": "Measure the idempotency store in the Kotlin runtime",
      "description": "Harden cold starts.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "IN_REVIEW",
      "priority": "LOW",
      "estimate": 3,
      "createdAt": "2025-12-09T11:00:00.000Z",
      "updatedAt": "2025-12-10T23:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m08",
      "assigneeId": "m08",
      "labelIds": [
        "l03",
        "l05",
        "l07"
      ],
      "parentId": "i050",
      "attachments": [],
      "externalState": null,
      "assignee": {
        "id": "m08",
        "role": "MEMBER",
        "user": {
          "id": "u08",
          "name": "Tim Berners-Lee",
          "avatarUrl": "https://avatars.example.com/u08.png",
          "email": "tim.berners.lee@acme.example"
        }
      },
      "labels": [
        {
          "id": "l03",
          "name": "chore",
          "color": "#cfd3d7"
        },
        {
          "id": "l05",
          "name": "performance",
          "color": "#a2eeef"
        },
        {
          "id": "l07",
          "name": "ux",
          "color": "#d4c5f9"
        }
      ]
    },
    {
      "id": "i050",
      "key": "ING-50",
      "title": "Refactor policy pushdown for large pages",
      "description": "Add the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "IN_PROGRESS",
      "priority": "HIGH",
      "estimate": 1,
      "createdAt": "2025-12-09T07:00:00.000Z",
      "updatedAt": "2025-12-09T10:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m05",
      "assigneeId": "m02",
      "labelIds": [
        "l04",
        "l08",
        "l10"
      ],
      "parentId": null,
      "attachments": [
        {
          "filename": "trace-050.json",
          "contentType": "application/json",
          "size": 362494,
          "url": "https://files.example.com/trace-050.json"
        }
      ],
      "externalState": null,
      "assignee": {
        "id": "m02",
        "role": "ADMIN",
        "user": {
          "id": "u02",
          "name": "Grace Hopper",
          "avatarUrl": "https://avatars.example.com/u02.png",
          "email": "grace.hopper@acme.example"
        }
      },
      "labels": [
        {
          "id": "l04",
          "name": "docs",
          "color": "#0075ca"
        },
        {
          "id": "l08",
          "name": "infra",
          "color": "#5319e7"
        },
        {
          "id": "l10",
          "name": "regression",
          "color": "#e99695"
        }
      ]
    },
    {
      "id": "i045",
      "key": "ING-45",
      "title": "Harden the idempotency store after a redeploy",
      "description": "Retry the WebSocket transport.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "CANCELLED",
      "priority": "NONE",
      "estimate": 3,
      "createdAt": "2025-12-09T02:00:00.000Z",
      "updatedAt": "2025-12-10T10:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m07",
      "assigneeId": "m08",
      "labelIds": [
        "l02",
        "l06"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": {
        "id": "m08",
        "role": "MEMBER",
        "user": {
          "id": "u08",
          "name": "Tim Berners-Lee",
          "avatarUrl": "https://avatars.example.com/u08.png",
          "email": "tim.berners.lee@acme.example"
        }
      },
      "labels": [
        {
          "id": "l02",
          "name": "feature",
          "color": "#0e8a16"
        },
        {
          "id": "l06",
          "name": "security",
          "color": "#b60205"
        }
      ]
    },
    {
      "id": "i042",
      "key": "ING-42",
      "title": "Measure cursor pagination after a redeploy",
      "description": "Document the batch planner.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "DONE",
      "priority": "MEDIUM",
      "estimate": null,
      "createdAt": "2025-12-08T23:00:00.000Z",
      "updatedAt": "2025-12-09T01:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m09",
      "assigneeId": "m09",
      "labelIds": [
        "l05",
        "l10"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": "SYNCED",
      "assignee": {
        "id": "m09",
        "role": "MEMBER",
        "user": {
          "id": "u09",
          "name": "Margaret Hamilton",
          "avatarUrl": "https://avatars.example.com/u09.png",
          "email": "margaret.hamilton@acme.example"
        }
      },
      "labels": [
        {
          "id": "l05",
          "name": "performance",
          "color": "#a2eeef"
        },
        {
          "id": "l10",
          "name": "regression",
          "color": "#e99695"
        }
      ]
    },
    {
      "id": "i036",
      "key": "ING-36",
      "title": "Fix policy pushdown behind a proxy",
      "description": "Add cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "TODO",
      "priority": "NONE",
      "estimate": null,
      "createdAt": "2025-12-08T17:00:00.000Z",
      "updatedAt": "2025-12-10T05:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m12",
      "assigneeId": "m09",
      "labelIds": [],
      "parentId": "i026",
      "attachments": [],
      "externalState": null,
      "assignee": {
        "id": "m09",
        "role": "MEMBER",
        "user": {
          "id": "u09",
          "name": "Margaret Hamilton",
          "avatarUrl": "https://avatars.example.com/u09.png",
          "email": "margaret.hamilton@acme.example"
        }
      },
      "labels": []
    },
    {
      "id": "i031",
      "key": "ING-31",
      "title": "Measure schema reload behind a proxy",
      "description": "Investigate the idempotency store.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "CANCELLED",
      "priority": "URGENT",
      "estimate": null,
      "createdAt": "2025-12-08T12:00:00.000Z",
      "updatedAt": "2025-12-10T01:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m01",
      "assigneeId": null,
      "labelIds": [
        "l01",
        "l06"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": null,
      "labels": [
        {
          "id": "l01",
          "name": "bug",
          "color": "#d73a4a"
        },
        {
          "id": "l06",
          "name": "security",
          "color": "#b60205"
        }
      ]
    },
    {
      "id": "i028",
      "key": "ING-28",
      "title": "Retry the shape registry in the Kotlin runtime",
      "description": "Refactor cursor pagination.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "TODO",
      "priority": "URGENT",
      "estimate": 8,
      "createdAt": "2025-12-08T09:00:00.000Z",
      "updatedAt": "2025-12-08T16:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m07",
      "assigneeId": "m12",
      "labelIds": [
        "l02",
        "l03",
        "l05"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": "SYNCED",
      "assignee": {
        "id": "m12",
        "role": "GUEST",
        "user": {
          "id": "u12",
          "name": "Leslie Lamport",
          "avatarUrl": "https://avatars.example.com/u12.png",
          "email": "leslie.lamport@acme.example"
        }
      },
      "labels": [
        {
          "id": "l02",
          "name": "feature",
          "color": "#0e8a16"
        },
        {
          "id": "l03",
          "name": "chore",
          "color": "#cfd3d7"
        },
        {
          "id": "l05",
          "name": "performance",
          "color": "#a2eeef"
        }
      ]
    },
    {
      "id": "i025",
      "key": "ING-25",
      "title": "Fix policy pushdown under load",
      "description": "Measure the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "TODO",
      "priority": "NONE",
      "estimate": null,
      "createdAt": "2025-12-08T06:00:00.000Z",
      "updatedAt": "2025-12-09T15:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m04",
      "assigneeId": "m08",
      "labelIds": [
        "l04"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": {
        "id": "m08",
        "role": "MEMBER",
        "user": {
          "id": "u08",
          "name": "Tim Berners-Lee",
          "avatarUrl": "https://avatars.example.com/u08.png",
          "email": "tim.berners.lee@acme.example"
        }
      },
      "labels": [
        {
          "id": "l04",
          "name": "docs",
          "color": "#0075ca"
        }
      ]
    },
    {
      "id": "i015",
      "key": "ING-15",
      "title": "Fix schema reload for offline clients",
      "description": "Fix policy pushdown.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "DONE",
      "priority": "NONE",
      "estimate": null,
      "createdAt": "2025-12-07T20:00:00.000Z",
      "updatedAt": "2025-12-08T23:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m08",
      "assigneeId": "m02",
      "labelIds": [
        "l02"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": {
        "id": "m02",
        "role": "ADMIN",
        "user": {
          "id": "u02",
          "name": "Grace Hopper",
          "avatarUrl": "https://avatars.example.com/u02.png",
          "email": "grace.hopper@acme.example"
        }
      },
      "labels": [
        {
          "id": "l02",
          "name": "feature",
          "color": "#0e8a16"
        }
      ]
    },
    {
      "id": "i002",
      "key": "ING-2",
      "title": "Document the batch planner on reconnect",
      "description": "Fix the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "IN_PROGRESS",
      "priority": "URGENT",
      "estimate": 1,
      "createdAt": "2025-12-07T07:00:00.000Z",
      "updatedAt": "2025-12-08T08:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m12",
      "assigneeId": "m08",
      "labelIds": [
        "l01",
        "l02",
        "l04"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": {
        "id": "m08",
        "role": "MEMBER",
        "user": {
          "id": "u08",
          "name": "Tim Berners-Lee",
          "avatarUrl": "https://avatars.example.com/u08.png",
          "email": "tim.berners.lee@acme.example"
        }
      },
      "labels": [
        {
          "id": "l01",
          "name": "bug",
          "color": "#d73a4a"
        },
        {
          "id": "l02",
          "name": "feature",
          "color": "#0e8a16"
        },
        {
          "id": "l04",
          "name": "docs",
          "color": "#0075ca"
        }
      ]
    },
    {
      "id": "i001",
      "key": "ING-1",
      "title": "Remove the idempotency store after a redeploy",
      "description": "Cache policy pushdown.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
      "state": "IN_PROGRESS",
      "priority": "HIGH",
      "estimate": 2,
      "createdAt": "2025-12-07T06:00:00.000Z",
      "updatedAt": "2025-12-07T13:00:00.000Z",
      "version": 1,
      "projectId": "p1",
      "sprintId": "s02",
      "reporterId": "m03",
      "assigneeId": "m08",
      "labelIds": [
        "l02",
        "l04",
        "l05"
      ],
      "parentId": null,
      "attachments": [],
      "externalState": null,
      "assignee": {
        "id": "m08",
        "role": "MEMBER",
        "user": {
          "id": "u08",
          "name": "Tim Berners-Lee",
          "avatarUrl": "https://avatars.example.com/u08.png",
          "email": "tim.berners.lee@acme.example"
        }
      },
      "labels": [
        {
          "id": "l02",
          "name": "feature",
          "color": "#0e8a16"
        },
        {
          "id": "l04",
          "name": "docs",
          "color": "#0075ca"
        },
        {
          "id": "l05",
          "name": "performance",
          "color": "#a2eeef"
        }
      ]
    }
  ],
  "cursor": "i001",
  "hasMore": false,
  "total": 20
}
POST /sprints/s02/close
authorization: Bearer u01
content-type: application/json

{
  "carryTo": "s03"
}
200 OK
content-type: application/json

{
  "sprint": {
    "id": "s02",
    "name": "ING Sprint 2",
    "state": "CLOSED"
  },
  "moved": 11,
  "carriedOver": 11
}

GraphQL 1 request

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "mutation { closeSprint(id: \"s02\", carryTo: \"s03\") { sprint { id state } moved carriedOver } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "closeSprint": {
      "sprint": {
        "id": "s02",
        "state": "CLOSED"
      },
      "moved": 11,
      "carriedOver": 11
    }
  }
}

Rayfold 1 request

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "closeSprint",
      "args": {
        "id": "s02",
        "carryTo": "s03"
      },
      "key": "ws-close-0000001",
      "shape": "{ sprint { id state } moved carriedOver }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "sprint": {
      "$type": "Sprint",
      "id": "s02",
      "state": "CLOSED"
    },
    "moved": 11,
    "carriedOver": 11
  },
  "patch": [
    {
      "set": "Sprint:s02",
      "value": {
        "$type": "Sprint",
... 111 more lines
Full response body
{
  "id": 1,
  "ok": {
    "sprint": {
      "$type": "Sprint",
      "id": "s02",
      "state": "CLOSED"
    },
    "moved": 11,
    "carriedOver": 11
  },
  "patch": [
    {
      "set": "Sprint:s02",
      "value": {
        "$type": "Sprint",
        "id": "s02",
        "state": "CLOSED"
      }
    },
    {
      "set": "Issue:i077",
      "value": {
        "sprintId": "s03",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Issue:i063",
      "value": {
        "sprintId": "s03",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Issue:i060",
      "value": {
        "sprintId": "s03",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Issue:i058",
      "value": {
        "sprintId": "s03",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Issue:i054",
      "value": {
        "sprintId": "s03",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Issue:i050",
      "value": {
        "sprintId": "s03",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Issue:i036",
      "value": {
        "sprintId": "s03",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Issue:i028",
      "value": {
        "sprintId": "s03",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Issue:i025",
      "value": {
        "sprintId": "s03",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Issue:i002",
      "value": {
        "sprintId": "s03",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Issue:i001",
      "value": {
        "sprintId": "s03",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Sprint:s02",
      "value": {
        "state": "CLOSED"
      }
    },
    {
      "invOp": [
        "board",
        "issues",
        "activity"
      ]
    }
  ],
  "meta": {
    "cost": 21
  },
  "fin": true
}

Someone else moves an issue you are looking at

Rayfold ahead

Measured: what it takes to keep one screen correct (pieces the developer writes, lower is better)

RESTREST: 3 pieces the developer writes3GraphQLGraphQL: 3 pieces the developer writes3RayfoldRayfold: 1 pieces the developer writes1
REST
an SSE endpoint, an event fan-out and client merge code; the event carries an id, so the client refetches (1,090 B to become correct)
GraphQL
a Subscription type, a resolver with an async iterator, and client merge code; then a refetch (225 B)
Rayfold
`live: true` on the query that already draws the screen: the server diffs the result and sends a patch, and the client cache applies it

Both other stacks can push the new state in the event itself, but then the event has to be shaped for each screen that listens.

See the real requests and responses (9)

REST 4 requests

GET /projects/p1/board?limit=10
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "94086e668373a930"

{
  "project": {
    "id": "p1",
    "key": "ING",
    "name": "Ingest pipeline",
    "status": "ACTIVE",
    "startDate": "2026-01-05",
    "targetDate": "2026-03-15",
    "teamId": "t1",
    "leadId": "m01"
  },
  "columns": [
    {
      "state": "TRIAGE",
      "count": 20,
      "issues": [
... 2613 more lines
Full response body
{
  "project": {
    "id": "p1",
    "key": "ING",
    "name": "Ingest pipeline",
    "status": "ACTIVE",
    "startDate": "2026-01-05",
    "targetDate": "2026-03-15",
    "teamId": "t1",
    "leadId": "m01"
  },
  "columns": [
    {
      "state": "TRIAGE",
      "count": 20,
      "issues": [
        {
          "id": "i093",
          "key": "ING-93",
          "title": "Retry the retry budget in the Kotlin runtime",
          "description": "Fix policy pushdown.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T02:00:00.000Z",
          "updatedAt": "2025-12-11T18:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m09",
          "assigneeId": "m04",
          "labelIds": [
            "l01"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m04",
            "role": "MEMBER",
            "user": {
              "id": "u04",
              "name": "Katherine Johnson",
              "avatarUrl": null,
              "email": "katherine.johnson@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            }
          ]
        },
        {
          "id": "i086",
          "key": "ING-86",
          "title": "Remove schema reload after a redeploy",
          "description": "Cache cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-10T19:00:00.000Z",
          "updatedAt": "2025-12-12T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m12",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i085",
          "key": "ING-85",
          "title": "Remove schema reload for offline clients",
          "description": "Cache the idempotency store.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 3,
          "createdAt": "2025-12-10T18:00:00.000Z",
          "updatedAt": "2025-12-11T01:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m07",
          "assigneeId": "m08",
          "labelIds": [
            "l01",
            "l05",
            "l10"
          ],
          "parentId": "i080",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i076",
          "key": "ING-76",
          "title": "Fix cold starts on reconnect",
          "description": "Cache schema reload.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 3,
          "createdAt": "2025-12-10T09:00:00.000Z",
          "updatedAt": "2025-12-11T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m07",
          "labelIds": [
            "l07",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i075",
          "key": "ING-75",
          "title": "Document the retry budget on reconnect",
          "description": "Remove the shape registry.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 5,
          "createdAt": "2025-12-10T08:00:00.000Z",
          "updatedAt": "2025-12-11T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m04",
          "assigneeId": "m10",
          "labelIds": [
            "l01",
            "l07",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i070",
          "key": "ING-70",
          "title": "Document schema reload for large pages",
          "description": "Retry policy pushdown.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-10T03:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m04",
          "labelIds": [
            "l05",
            "l07"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-070.json",
              "contentType": "application/json",
              "size": 378856,
              "url": "https://files.example.com/trace-070.json"
            }
          ],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m04",
            "role": "MEMBER",
            "user": {
              "id": "u04",
              "name": "Katherine Johnson",
              "avatarUrl": null,
              "email": "katherine.johnson@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i052",
          "key": "ING-52",
          "title": "Document cold starts for offline clients",
          "description": "Measure cold starts.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 5,
          "createdAt": "2025-12-09T09:00:00.000Z",
          "updatedAt": "2025-12-10T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m08",
          "assigneeId": "m12",
          "labelIds": [
            "l03",
            "l06",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i047",
          "key": "ING-47",
          "title": "Fix keep-alives after a redeploy",
          "description": "Document keep-alives.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-09T04:00:00.000Z",
          "updatedAt": "2025-12-10T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m11",
          "labelIds": [
            "l02",
            "l06",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m11",
            "role": "MEMBER",
            "user": {
              "id": "u11",
              "name": "Anita Borg",
              "avatarUrl": "https://avatars.example.com/u11.png",
              "email": "anita.borg@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i046",
          "key": "ING-46",
          "title": "Retry keep-alives for large pages",
          "description": "Harden the WebSocket transport.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": 5,
          "createdAt": "2025-12-09T03:00:00.000Z",
          "updatedAt": "2025-12-09T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m09",
          "labelIds": [
            "l06",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i043",
          "key": "ING-43",
          "title": "Fix the WebSocket transport for large pages",
          "description": "Cache the batch planner.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": 5,
          "createdAt": "2025-12-09T00:00:00.000Z",
          "updatedAt": "2025-12-09T17:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": "m11",
          "labelIds": [
            "l02",
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m11",
            "role": "MEMBER",
            "user": {
              "id": "u11",
              "name": "Anita Borg",
              "avatarUrl": "https://avatars.example.com/u11.png",
              "email": "anita.borg@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        }
      ]
    },
    {
      "state": "BACKLOG",
      "count": 15,
      "issues": [
        {
          "id": "i094",
          "key": "ING-94",
          "title": "Retry keep-alives behind a proxy",
          "description": "Fix the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "MEDIUM",
          "estimate": 2,
          "createdAt": "2025-12-11T03:00:00.000Z",
          "updatedAt": "2025-12-11T17:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m03",
          "labelIds": [
            "l04"
          ],
          "parentId": "i093",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i092",
          "key": "ING-92",
          "title": "Refactor the WebSocket transport after a redeploy",
          "description": "Document the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 1,
          "createdAt": "2025-12-11T01:00:00.000Z",
          "updatedAt": "2025-12-12T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": "m06",
          "labelIds": [
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m06",
            "role": "MEMBER",
            "user": {
              "id": "u06",
              "name": "Edsger Dijkstra",
              "avatarUrl": "https://avatars.example.com/u06.png",
              "email": "edsger.dijkstra@acme.example"
            }
          },
          "labels": [
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i089",
          "key": "ING-89",
          "title": "Document cold starts for large pages",
          "description": "Fix the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "MEDIUM",
          "estimate": 2,
          "createdAt": "2025-12-10T22:00:00.000Z",
          "updatedAt": "2025-12-12T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i083",
          "key": "ING-83",
          "title": "Document the retry budget under load",
          "description": "Add policy pushdown.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-10T16:00:00.000Z",
          "updatedAt": "2025-12-11T03:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": "m12",
          "labelIds": [
            "l01",
            "l03",
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i079",
          "key": "ING-79",
          "title": "Remove cursor pagination behind a proxy",
          "description": "Measure the shape registry.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-10T12:00:00.000Z",
          "updatedAt": "2025-12-12T03:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l10"
          ],
          "parentId": "i072",
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i071",
          "key": "ING-71",
          "title": "Remove the idempotency store behind a proxy",
          "description": "Remove schema reload.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 2,
          "createdAt": "2025-12-10T04:00:00.000Z",
          "updatedAt": "2025-12-10T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m01",
          "assigneeId": "m12",
          "labelIds": [],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": []
        },
        {
          "id": "i069",
          "key": "ING-69",
          "title": "Retry the batch planner after a redeploy",
          "description": "Fix the WebSocket transport.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 3,
          "createdAt": "2025-12-10T02:00:00.000Z",
          "updatedAt": "2025-12-11T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i055",
          "key": "ING-55",
          "title": "Harden the retry budget for offline clients",
          "description": "Cache the retry budget.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 5,
          "createdAt": "2025-12-09T12:00:00.000Z",
          "updatedAt": "2025-12-10T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m08",
          "labelIds": [
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i041",
          "key": "ING-41",
          "title": "Investigate the shape registry under load",
          "description": "Remove cursor pagination.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 5,
          "createdAt": "2025-12-08T22:00:00.000Z",
          "updatedAt": "2025-12-10T10:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i040",
          "key": "ING-40",
          "title": "Document schema reload in the Kotlin runtime",
          "description": "Refactor schema reload.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "URGENT",
          "estimate": 5,
          "createdAt": "2025-12-08T21:00:00.000Z",
          "updatedAt": "2025-12-09T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m07",
          "assigneeId": "m12",
          "labelIds": [
            "l06",
            "l09"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-040.json",
              "contentType": "application/json",
              "size": 201090,
              "url": "https://files.example.com/trace-040.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        }
      ]
    },
    {
      "state": "TODO",
      "count": 9,
      "issues": [
        {
          "id": "i078",
          "key": "ING-78",
          "title": "Refactor the WebSocket transport on reconnect",
          "description": "Fix the shape registry.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": 1,
          "createdAt": "2025-12-10T11:00:00.000Z",
          "updatedAt": "2025-12-10T11:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m12",
          "assigneeId": "m02",
          "labelIds": [
            "l04",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i077",
          "key": "ING-77",
          "title": "Remove the batch planner for large pages",
          "description": "Measure the idempotency store.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "MEDIUM",
          "estimate": 3,
          "createdAt": "2025-12-10T10:00:00.000Z",
          "updatedAt": "2025-12-11T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m12",
          "assigneeId": null,
          "labelIds": [
            "l01",
            "l07",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": null,
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i066",
          "key": "ING-66",
          "title": "Retry the idempotency store under load",
          "description": "Cache cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-09T23:00:00.000Z",
          "updatedAt": "2025-12-10T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m12",
          "assigneeId": "m09",
          "labelIds": [
            "l03"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            }
          ]
        },
        {
          "id": "i049",
          "key": "ING-49",
          "title": "Refactor policy pushdown on reconnect",
          "description": "Remove schema reload.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "MEDIUM",
          "estimate": 8,
          "createdAt": "2025-12-09T06:00:00.000Z",
          "updatedAt": "2025-12-10T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m02",
          "assigneeId": "m08",
          "labelIds": [
            "l01",
            "l06",
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i038",
          "key": "ING-38",
          "title": "Document schema reload on slow networks",
          "description": "Remove the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "LOW",
          "estimate": 1,
          "createdAt": "2025-12-08T19:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m12",
          "assigneeId": "m06",
          "labelIds": [
            "l01",
            "l03",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m06",
            "role": "MEMBER",
            "user": {
              "id": "u06",
              "name": "Edsger Dijkstra",
              "avatarUrl": "https://avatars.example.com/u06.png",
              "email": "edsger.dijkstra@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i037",
          "key": "ING-37",
          "title": "Remove policy pushdown for large pages",
          "description": "Document the batch planner.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-08T18:00:00.000Z",
          "updatedAt": "2025-12-09T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": "m10",
          "labelIds": [
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i036",
          "key": "ING-36",
          "title": "Fix policy pushdown behind a proxy",
          "description": "Add cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-08T17:00:00.000Z",
          "updatedAt": "2025-12-10T05:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m12",
          "assigneeId": "m09",
          "labelIds": [],
          "parentId": "i026",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": []
        },
        {
          "id": "i028",
          "key": "ING-28",
          "title": "Retry the shape registry in the Kotlin runtime",
          "description": "Refactor cursor pagination.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "URGENT",
          "estimate": 8,
          "createdAt": "2025-12-08T09:00:00.000Z",
          "updatedAt": "2025-12-08T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": "m12",
          "labelIds": [
            "l02",
            "l03",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i025",
          "key": "ING-25",
          "title": "Fix policy pushdown under load",
          "description": "Measure the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-08T06:00:00.000Z",
          "updatedAt": "2025-12-09T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m04",
          "assigneeId": "m08",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        }
      ]
    },
    {
      "state": "IN_PROGRESS",
      "count": 17,
      "issues": [
        {
          "id": "i100",
          "key": "ING-100",
          "title": "Document the batch planner under load",
          "description": "Document the retry budget.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-11T09:00:00.000Z",
          "updatedAt": "2025-12-12T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m03",
          "assigneeId": "m03",
          "labelIds": [
            "l05",
            "l08"
          ],
          "parentId": "i098",
          "attachments": [
            {
              "filename": "trace-100.json",
              "contentType": "application/json",
              "size": 402342,
              "url": "https://files.example.com/trace-100.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i090",
          "key": "ING-90",
          "title": "Investigate keep-alives on reconnect",
          "description": "Harden the retry budget.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "URGENT",
          "estimate": 5,
          "createdAt": "2025-12-10T23:00:00.000Z",
          "updatedAt": "2025-12-12T00:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m07",
          "assigneeId": null,
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-090.json",
              "contentType": "application/json",
              "size": 255690,
              "url": "https://files.example.com/trace-090.json"
            }
          ],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i067",
          "key": "ING-67",
          "title": "Harden the batch planner behind a proxy",
          "description": "Fix the retry budget.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "MEDIUM",
          "estimate": 13,
          "createdAt": "2025-12-10T00:00:00.000Z",
          "updatedAt": "2025-12-10T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m12",
          "labelIds": [
            "l09",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i065",
          "key": "ING-65",
          "title": "Measure the batch planner on reconnect",
          "description": "Fix policy pushdown.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-09T22:00:00.000Z",
          "updatedAt": "2025-12-10T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m01",
          "labelIds": [
            "l02",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i064",
          "key": "ING-64",
          "title": "Remove keep-alives in the Kotlin runtime",
          "description": "Document keep-alives.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-09T21:00:00.000Z",
          "updatedAt": "2025-12-10T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m04",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l05",
            "l06"
          ],
          "parentId": "i056",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i061",
          "key": "ING-61",
          "title": "Retry keep-alives on reconnect",
          "description": "Measure the batch planner.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "HIGH",
          "estimate": 3,
          "createdAt": "2025-12-09T18:00:00.000Z",
          "updatedAt": "2025-12-09T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m08",
          "assigneeId": "m08",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i058",
          "key": "ING-58",
          "title": "Refactor the batch planner for large pages",
          "description": "Refactor cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-09T15:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m08",
          "assigneeId": "m07",
          "labelIds": [
            "l02",
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i050",
          "key": "ING-50",
          "title": "Refactor policy pushdown for large pages",
          "description": "Add the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "HIGH",
          "estimate": 1,
          "createdAt": "2025-12-09T07:00:00.000Z",
          "updatedAt": "2025-12-09T10:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m05",
          "assigneeId": "m02",
          "labelIds": [
            "l04",
            "l08",
            "l10"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-050.json",
              "contentType": "application/json",
              "size": 362494,
              "url": "https://files.example.com/trace-050.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i030",
          "key": "ING-30",
          "title": "Fix cursor pagination for large pages",
          "description": "Harden keep-alives.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-08T11:00:00.000Z",
          "updatedAt": "2025-12-09T12:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m09",
          "assigneeId": "m02",
          "labelIds": [
            "l02",
            "l04"
          ],
          "parentId": "i023",
          "attachments": [
            {
              "filename": "trace-030.json",
              "contentType": "application/json",
              "size": 141270,
              "url": "https://files.example.com/trace-030.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i026",
          "key": "ING-26",
          "title": "Retry keep-alives on reconnect",
          "description": "Remove the idempotency store.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "NONE",
          "estimate": 2,
          "createdAt": "2025-12-08T07:00:00.000Z",
          "updatedAt": "2025-12-09T00:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m10",
          "assigneeId": "m03",
          "labelIds": [
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        }
      ]
    },
    {
      "state": "IN_REVIEW",
      "count": 9,
      "issues": [
        {
          "id": "i091",
          "key": "ING-91",
          "title": "Refactor the retry budget after a redeploy",
          "description": "Cache the idempotency store.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T00:00:00.000Z",
          "updatedAt": "2025-12-12T04:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m01",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i087",
          "key": "ING-87",
          "title": "Measure the WebSocket transport for offline clients",
          "description": "Cache the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "NONE",
          "estimate": 13,
          "createdAt": "2025-12-10T20:00:00.000Z",
          "updatedAt": "2025-12-11T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l05",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i082",
          "key": "ING-82",
          "title": "Retry the WebSocket transport in the Kotlin runtime",
          "description": "Refactor policy pushdown.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-10T15:00:00.000Z",
          "updatedAt": "2025-12-10T19:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l04",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i072",
          "key": "ING-72",
          "title": "Investigate policy pushdown for offline clients",
          "description": "Refactor the retry budget.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "MEDIUM",
          "estimate": 3,
          "createdAt": "2025-12-10T05:00:00.000Z",
          "updatedAt": "2025-12-10T20:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m10",
          "labelIds": [
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i063",
          "key": "ING-63",
          "title": "Retry the batch planner for large pages",
          "description": "Add schema reload.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-09T20:00:00.000Z",
          "updatedAt": "2025-12-10T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m11",
          "assigneeId": "m08",
          "labelIds": [
            "l05",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i060",
          "key": "ING-60",
          "title": "Measure cold starts under load",
          "description": "Refactor policy pushdown.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-09T17:00:00.000Z",
          "updatedAt": "2025-12-10T01:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": "m01",
          "labelIds": [
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-060.json",
              "contentType": "application/json",
              "size": 301630,
              "url": "https://files.example.com/trace-060.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i054",
          "key": "ING-54",
          "title": "Measure the idempotency store in the Kotlin runtime",
          "description": "Harden cold starts.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-09T11:00:00.000Z",
          "updatedAt": "2025-12-10T23:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m08",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l05",
            "l07"
          ],
          "parentId": "i050",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i016",
          "key": "ING-16",
          "title": "Measure the shape registry on slow networks",
          "description": "Harden the batch planner.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 8,
          "createdAt": "2025-12-07T21:00:00.000Z",
          "updatedAt": "2025-12-08T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m05",
          "assigneeId": "m10",
          "labelIds": [
            "l01",
            "l02"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            }
          ]
        },
        {
          "id": "i010",
          "key": "ING-10",
          "title": "Refactor cursor pagination on reconnect",
          "description": "Fix the WebSocket transport.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "URGENT",
          "estimate": 3,
          "createdAt": "2025-12-07T15:00:00.000Z",
          "updatedAt": "2025-12-07T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m08",
          "assigneeId": "m05",
          "labelIds": [
            "l02",
            "l08"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-010.json",
              "contentType": "application/json",
              "size": 366443,
              "url": "https://files.example.com/trace-010.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m05",
            "role": "MEMBER",
            "user": {
              "id": "u05",
              "name": "Barbara Liskov",
              "avatarUrl": "https://avatars.example.com/u05.png",
              "email": "barbara.liskov@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        }
      ]
    },
    {
      "state": "DONE",
      "count": 15,
      "issues": [
        {
          "id": "i098",
          "key": "ING-98",
          "title": "Investigate policy pushdown behind a proxy",
          "description": "Add cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-11T07:00:00.000Z",
          "updatedAt": "2025-12-11T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": null,
          "labelIds": [],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": null,
          "labels": []
        },
        {
          "id": "i097",
          "key": "ING-97",
          "title": "Refactor the idempotency store on slow networks",
          "description": "Refactor the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T06:00:00.000Z",
          "updatedAt": "2025-12-11T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m10",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i096",
          "key": "ING-96",
          "title": "Add cursor pagination behind a proxy",
          "description": "Remove keep-alives.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-11T05:00:00.000Z",
          "updatedAt": "2025-12-12T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": null,
          "labelIds": [
            "l04",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i095",
          "key": "ING-95",
          "title": "Document the retry budget for large pages",
          "description": "Measure keep-alives.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-11T04:00:00.000Z",
          "updatedAt": "2025-12-11T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m09",
          "assigneeId": null,
          "labelIds": [
            "l02",
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i088",
          "key": "ING-88",
          "title": "Remove schema reload for large pages",
          "description": "Retry keep-alives.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "URGENT",
          "estimate": null,
          "createdAt": "2025-12-10T21:00:00.000Z",
          "updatedAt": "2025-12-11T12:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m03",
          "labelIds": [
            "l01",
            "l05",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i081",
          "key": "ING-81",
          "title": "Add the idempotency store for offline clients",
          "description": "Add schema reload.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-10T14:00:00.000Z",
          "updatedAt": "2025-12-11T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m06",
          "assigneeId": "m01",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i073",
          "key": "ING-73",
          "title": "Document policy pushdown for offline clients",
          "description": "Remove the WebSocket transport.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-10T06:00:00.000Z",
          "updatedAt": "2025-12-11T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m06",
          "assigneeId": "m10",
          "labelIds": [
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i068",
          "key": "ING-68",
          "title": "Measure keep-alives behind a proxy",
          "description": "Measure cold starts.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-10T01:00:00.000Z",
          "updatedAt": "2025-12-10T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m03",
          "labelIds": [
            "l04"
          ],
          "parentId": "i067",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i051",
          "key": "ING-51",
          "title": "Retry the shape registry for offline clients",
          "description": "Refactor cold starts.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-09T08:00:00.000Z",
          "updatedAt": "2025-12-10T23:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m06",
          "assigneeId": "m12",
          "labelIds": [
            "l02",
            "l03",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i048",
          "key": "ING-48",
          "title": "Cache schema reload for large pages",
          "description": "Investigate the retry budget.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "URGENT",
          "estimate": null,
          "createdAt": "2025-12-09T05:00:00.000Z",
          "updatedAt": "2025-12-10T20:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        }
      ]
    }
  ]
}
GET /events
authorization: Bearer u01
200 OK
cache-control: no-cache
content-type: text/event-stream

: open

data: {"event":"IssueMoved","issueId":"i078","from":"TODO","to":"IN_PROGRESS"}


(stream closed by the client)
2 more requests
POST /issues/i078/move
authorization: Bearer u01
content-type: application/json

{
  "to": "IN_PROGRESS"
}
200 OK
content-type: application/json

{
  "id": "i078",
  "key": "ING-78",
  "title": "Refactor the WebSocket transport on reconnect",
  "description": "Fix the shape registry.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "IN_PROGRESS",
  "priority": "NONE",
  "estimate": 1,
  "createdAt": "2025-12-10T11:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 2,
  "projectId": "p1",
  "sprintId": "s03",
  "reporterId": "m12",
  "assigneeId": "m02",
  "labelIds": [
... 29 more lines
Full response body
{
  "id": "i078",
  "key": "ING-78",
  "title": "Refactor the WebSocket transport on reconnect",
  "description": "Fix the shape registry.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "IN_PROGRESS",
  "priority": "NONE",
  "estimate": 1,
  "createdAt": "2025-12-10T11:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 2,
  "projectId": "p1",
  "sprintId": "s03",
  "reporterId": "m12",
  "assigneeId": "m02",
  "labelIds": [
    "l04",
    "l10"
  ],
  "parentId": null,
  "attachments": [],
  "externalState": null,
  "assignee": {
    "id": "m02",
    "role": "ADMIN",
    "user": {
      "id": "u02",
      "name": "Grace Hopper",
      "avatarUrl": "https://avatars.example.com/u02.png",
      "email": "grace.hopper@acme.example"
    }
  },
  "labels": [
    {
      "id": "l04",
      "name": "docs",
      "color": "#0075ca"
    },
    {
      "id": "l10",
      "name": "regression",
      "color": "#e99695"
    }
  ]
}
GET /issues/i078
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "2"

{
  "id": "i078",
  "key": "ING-78",
  "title": "Refactor the WebSocket transport on reconnect",
  "description": "Fix the shape registry.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "IN_PROGRESS",
  "priority": "NONE",
  "estimate": 1,
  "createdAt": "2025-12-10T11:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 2,
  "projectId": "p1",
  "sprintId": "s03",
  "reporterId": "m12",
  "assigneeId": "m02",
  "labelIds": [
... 29 more lines
Full response body
{
  "id": "i078",
  "key": "ING-78",
  "title": "Refactor the WebSocket transport on reconnect",
  "description": "Fix the shape registry.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "IN_PROGRESS",
  "priority": "NONE",
  "estimate": 1,
  "createdAt": "2025-12-10T11:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 2,
  "projectId": "p1",
  "sprintId": "s03",
  "reporterId": "m12",
  "assigneeId": "m02",
  "labelIds": [
    "l04",
    "l10"
  ],
  "parentId": null,
  "attachments": [],
  "externalState": null,
  "assignee": {
    "id": "m02",
    "role": "ADMIN",
    "user": {
      "id": "u02",
      "name": "Grace Hopper",
      "avatarUrl": "https://avatars.example.com/u02.png",
      "email": "grace.hopper@acme.example"
    }
  },
  "labels": [
    {
      "id": "l04",
      "name": "docs",
      "color": "#0075ca"
    },
    {
      "id": "l10",
      "name": "regression",
      "color": "#e99695"
    }
  ]
}

GraphQL 3 requests

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "subscription { projectFeed(projectId: \"p1\") { issueId from to } }"
}
200 OK
cache-control: no-store
content-type: text/event-stream

: subscribed

data: {"data":{"projectFeed":{"issueId":"i078","from":"TODO","to":"IN_PROGRESS"}}}


(stream closed by the client)
POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "mutation { moveIssue(id: \"i078\", to: IN_PROGRESS) { version } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "moveIssue": {
      "version": 2
    }
  }
}
1 more request
POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ issue(id: \"i078\") { id key state version } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "issue": {
      "id": "i078",
      "key": "ING-78",
      "state": "IN_PROGRESS",
      "version": 2
    }
  }
}

Rayfold 2 requests

POST /rayfold
accept: application/rayfold-frames+json
authorization: Bearer u01
content-type: application/rayfold+json

{
  "rayfold": "0.1",
  "ops": [
    {
      "id": 1,
      "op": "issue",
      "args": {
        "id": "i078"
      },
      "shape": "{ id key state version }",
      "live": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"$type":"Issue","id":"i078","key":"ING-78","state":"TODO","version":1},"meta":{"cost":1}}
{"id":1,"patch":[{"set":"Issue:i078","value":{"state":"IN_PROGRESS","version":2}}]}

(stream closed by the client)
POST /rayfold
accept: application/rayfold-frames+json
authorization: Bearer u01
content-type: application/rayfold+json

{
  "rayfold": "0.1",
  "ops": [
    {
      "id": 1,
      "op": "moveIssue",
      "args": {
        "id": "i078",
        "to": "IN_PROGRESS"
      },
      "key": "7ad824515fbd473caabbf3f2190ecce3"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "$type": "Issue",
    "id": "i078",
    "key": "ING-78",
    "title": "Refactor the WebSocket transport on reconnect",
    "state": "IN_PROGRESS",
    "priority": "NONE",
    "updatedAt": "2026-02-01T12:00:01.000Z"
  },
  "patch": [
    {
      "set": "Issue:i078",
      "value": {
        "$type": "Issue",
... 27 more lines
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Issue",
    "id": "i078",
    "key": "ING-78",
    "title": "Refactor the WebSocket transport on reconnect",
    "state": "IN_PROGRESS",
    "priority": "NONE",
    "updatedAt": "2026-02-01T12:00:01.000Z"
  },
  "patch": [
    {
      "set": "Issue:i078",
      "value": {
        "$type": "Issue",
        "id": "i078",
        "key": "ING-78",
        "title": "Refactor the WebSocket transport on reconnect",
        "state": "IN_PROGRESS",
        "priority": "NONE",
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "set": "Issue:i078",
      "value": {
        "state": "IN_PROGRESS",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "invOp": [
        "board"
      ]
    }
  ],
  "meta": {
    "cost": 1
  },
  "fin": true
}

A board someone else is changing

Rayfold ahead

Measured: bytes per change, board open (bytes to keep an open board correct after one move, lower is better)

RESTREST: 56,628 bytes to keep an open board correct after one move56,628GraphQLGraphQL: 21,529 bytes to keep an open board correct after one move21,529RayfoldRayfold: 692 bytes to keep an open board correct after one move692
REST
56,628 B: the event carries an id, so the client fetches all six columns again
GraphQL
21,529 B: the subscription carries the event, so the client runs the board query again
Rayfold
692 B: the server diffs the board it already served and sends the row that moved and the two counts that changed

The client asks for nothing: it holds one live query, and what a change costs depends on the change rather than on the size of the screen.

See the real requests and responses (9)

REST 4 requests

GET /projects/p1/board?limit=10
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "94086e668373a930"

{
  "project": {
    "id": "p1",
    "key": "ING",
    "name": "Ingest pipeline",
    "status": "ACTIVE",
    "startDate": "2026-01-05",
    "targetDate": "2026-03-15",
    "teamId": "t1",
    "leadId": "m01"
  },
  "columns": [
    {
      "state": "TRIAGE",
      "count": 20,
      "issues": [
... 2613 more lines
Full response body
{
  "project": {
    "id": "p1",
    "key": "ING",
    "name": "Ingest pipeline",
    "status": "ACTIVE",
    "startDate": "2026-01-05",
    "targetDate": "2026-03-15",
    "teamId": "t1",
    "leadId": "m01"
  },
  "columns": [
    {
      "state": "TRIAGE",
      "count": 20,
      "issues": [
        {
          "id": "i093",
          "key": "ING-93",
          "title": "Retry the retry budget in the Kotlin runtime",
          "description": "Fix policy pushdown.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T02:00:00.000Z",
          "updatedAt": "2025-12-11T18:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m09",
          "assigneeId": "m04",
          "labelIds": [
            "l01"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m04",
            "role": "MEMBER",
            "user": {
              "id": "u04",
              "name": "Katherine Johnson",
              "avatarUrl": null,
              "email": "katherine.johnson@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            }
          ]
        },
        {
          "id": "i086",
          "key": "ING-86",
          "title": "Remove schema reload after a redeploy",
          "description": "Cache cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-10T19:00:00.000Z",
          "updatedAt": "2025-12-12T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m12",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i085",
          "key": "ING-85",
          "title": "Remove schema reload for offline clients",
          "description": "Cache the idempotency store.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 3,
          "createdAt": "2025-12-10T18:00:00.000Z",
          "updatedAt": "2025-12-11T01:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m07",
          "assigneeId": "m08",
          "labelIds": [
            "l01",
            "l05",
            "l10"
          ],
          "parentId": "i080",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i076",
          "key": "ING-76",
          "title": "Fix cold starts on reconnect",
          "description": "Cache schema reload.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 3,
          "createdAt": "2025-12-10T09:00:00.000Z",
          "updatedAt": "2025-12-11T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m07",
          "labelIds": [
            "l07",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i075",
          "key": "ING-75",
          "title": "Document the retry budget on reconnect",
          "description": "Remove the shape registry.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 5,
          "createdAt": "2025-12-10T08:00:00.000Z",
          "updatedAt": "2025-12-11T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m04",
          "assigneeId": "m10",
          "labelIds": [
            "l01",
            "l07",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i070",
          "key": "ING-70",
          "title": "Document schema reload for large pages",
          "description": "Retry policy pushdown.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-10T03:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m04",
          "labelIds": [
            "l05",
            "l07"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-070.json",
              "contentType": "application/json",
              "size": 378856,
              "url": "https://files.example.com/trace-070.json"
            }
          ],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m04",
            "role": "MEMBER",
            "user": {
              "id": "u04",
              "name": "Katherine Johnson",
              "avatarUrl": null,
              "email": "katherine.johnson@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i052",
          "key": "ING-52",
          "title": "Document cold starts for offline clients",
          "description": "Measure cold starts.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 5,
          "createdAt": "2025-12-09T09:00:00.000Z",
          "updatedAt": "2025-12-10T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m08",
          "assigneeId": "m12",
          "labelIds": [
            "l03",
            "l06",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i047",
          "key": "ING-47",
          "title": "Fix keep-alives after a redeploy",
          "description": "Document keep-alives.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-09T04:00:00.000Z",
          "updatedAt": "2025-12-10T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m11",
          "labelIds": [
            "l02",
            "l06",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m11",
            "role": "MEMBER",
            "user": {
              "id": "u11",
              "name": "Anita Borg",
              "avatarUrl": "https://avatars.example.com/u11.png",
              "email": "anita.borg@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i046",
          "key": "ING-46",
          "title": "Retry keep-alives for large pages",
          "description": "Harden the WebSocket transport.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": 5,
          "createdAt": "2025-12-09T03:00:00.000Z",
          "updatedAt": "2025-12-09T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m09",
          "labelIds": [
            "l06",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i043",
          "key": "ING-43",
          "title": "Fix the WebSocket transport for large pages",
          "description": "Cache the batch planner.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": 5,
          "createdAt": "2025-12-09T00:00:00.000Z",
          "updatedAt": "2025-12-09T17:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": "m11",
          "labelIds": [
            "l02",
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m11",
            "role": "MEMBER",
            "user": {
              "id": "u11",
              "name": "Anita Borg",
              "avatarUrl": "https://avatars.example.com/u11.png",
              "email": "anita.borg@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        }
      ]
    },
    {
      "state": "BACKLOG",
      "count": 15,
      "issues": [
        {
          "id": "i094",
          "key": "ING-94",
          "title": "Retry keep-alives behind a proxy",
          "description": "Fix the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "MEDIUM",
          "estimate": 2,
          "createdAt": "2025-12-11T03:00:00.000Z",
          "updatedAt": "2025-12-11T17:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m03",
          "labelIds": [
            "l04"
          ],
          "parentId": "i093",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i092",
          "key": "ING-92",
          "title": "Refactor the WebSocket transport after a redeploy",
          "description": "Document the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 1,
          "createdAt": "2025-12-11T01:00:00.000Z",
          "updatedAt": "2025-12-12T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": "m06",
          "labelIds": [
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m06",
            "role": "MEMBER",
            "user": {
              "id": "u06",
              "name": "Edsger Dijkstra",
              "avatarUrl": "https://avatars.example.com/u06.png",
              "email": "edsger.dijkstra@acme.example"
            }
          },
          "labels": [
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i089",
          "key": "ING-89",
          "title": "Document cold starts for large pages",
          "description": "Fix the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "MEDIUM",
          "estimate": 2,
          "createdAt": "2025-12-10T22:00:00.000Z",
          "updatedAt": "2025-12-12T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i083",
          "key": "ING-83",
          "title": "Document the retry budget under load",
          "description": "Add policy pushdown.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-10T16:00:00.000Z",
          "updatedAt": "2025-12-11T03:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": "m12",
          "labelIds": [
            "l01",
            "l03",
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i079",
          "key": "ING-79",
          "title": "Remove cursor pagination behind a proxy",
          "description": "Measure the shape registry.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-10T12:00:00.000Z",
          "updatedAt": "2025-12-12T03:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l10"
          ],
          "parentId": "i072",
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i071",
          "key": "ING-71",
          "title": "Remove the idempotency store behind a proxy",
          "description": "Remove schema reload.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 2,
          "createdAt": "2025-12-10T04:00:00.000Z",
          "updatedAt": "2025-12-10T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m01",
          "assigneeId": "m12",
          "labelIds": [],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": []
        },
        {
          "id": "i069",
          "key": "ING-69",
          "title": "Retry the batch planner after a redeploy",
          "description": "Fix the WebSocket transport.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 3,
          "createdAt": "2025-12-10T02:00:00.000Z",
          "updatedAt": "2025-12-11T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i055",
          "key": "ING-55",
          "title": "Harden the retry budget for offline clients",
          "description": "Cache the retry budget.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 5,
          "createdAt": "2025-12-09T12:00:00.000Z",
          "updatedAt": "2025-12-10T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m08",
          "labelIds": [
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i041",
          "key": "ING-41",
          "title": "Investigate the shape registry under load",
          "description": "Remove cursor pagination.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 5,
          "createdAt": "2025-12-08T22:00:00.000Z",
          "updatedAt": "2025-12-10T10:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i040",
          "key": "ING-40",
          "title": "Document schema reload in the Kotlin runtime",
          "description": "Refactor schema reload.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "URGENT",
          "estimate": 5,
          "createdAt": "2025-12-08T21:00:00.000Z",
          "updatedAt": "2025-12-09T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m07",
          "assigneeId": "m12",
          "labelIds": [
            "l06",
            "l09"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-040.json",
              "contentType": "application/json",
              "size": 201090,
              "url": "https://files.example.com/trace-040.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        }
      ]
    },
    {
      "state": "TODO",
      "count": 9,
      "issues": [
        {
          "id": "i078",
          "key": "ING-78",
          "title": "Refactor the WebSocket transport on reconnect",
          "description": "Fix the shape registry.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": 1,
          "createdAt": "2025-12-10T11:00:00.000Z",
          "updatedAt": "2025-12-10T11:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m12",
          "assigneeId": "m02",
          "labelIds": [
            "l04",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i077",
          "key": "ING-77",
          "title": "Remove the batch planner for large pages",
          "description": "Measure the idempotency store.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "MEDIUM",
          "estimate": 3,
          "createdAt": "2025-12-10T10:00:00.000Z",
          "updatedAt": "2025-12-11T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m12",
          "assigneeId": null,
          "labelIds": [
            "l01",
            "l07",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": null,
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i066",
          "key": "ING-66",
          "title": "Retry the idempotency store under load",
          "description": "Cache cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-09T23:00:00.000Z",
          "updatedAt": "2025-12-10T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m12",
          "assigneeId": "m09",
          "labelIds": [
            "l03"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            }
          ]
        },
        {
          "id": "i049",
          "key": "ING-49",
          "title": "Refactor policy pushdown on reconnect",
          "description": "Remove schema reload.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "MEDIUM",
          "estimate": 8,
          "createdAt": "2025-12-09T06:00:00.000Z",
          "updatedAt": "2025-12-10T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m02",
          "assigneeId": "m08",
          "labelIds": [
            "l01",
            "l06",
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i038",
          "key": "ING-38",
          "title": "Document schema reload on slow networks",
          "description": "Remove the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "LOW",
          "estimate": 1,
          "createdAt": "2025-12-08T19:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m12",
          "assigneeId": "m06",
          "labelIds": [
            "l01",
            "l03",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m06",
            "role": "MEMBER",
            "user": {
              "id": "u06",
              "name": "Edsger Dijkstra",
              "avatarUrl": "https://avatars.example.com/u06.png",
              "email": "edsger.dijkstra@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i037",
          "key": "ING-37",
          "title": "Remove policy pushdown for large pages",
          "description": "Document the batch planner.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-08T18:00:00.000Z",
          "updatedAt": "2025-12-09T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": "m10",
          "labelIds": [
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i036",
          "key": "ING-36",
          "title": "Fix policy pushdown behind a proxy",
          "description": "Add cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-08T17:00:00.000Z",
          "updatedAt": "2025-12-10T05:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m12",
          "assigneeId": "m09",
          "labelIds": [],
          "parentId": "i026",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": []
        },
        {
          "id": "i028",
          "key": "ING-28",
          "title": "Retry the shape registry in the Kotlin runtime",
          "description": "Refactor cursor pagination.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "URGENT",
          "estimate": 8,
          "createdAt": "2025-12-08T09:00:00.000Z",
          "updatedAt": "2025-12-08T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": "m12",
          "labelIds": [
            "l02",
            "l03",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i025",
          "key": "ING-25",
          "title": "Fix policy pushdown under load",
          "description": "Measure the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-08T06:00:00.000Z",
          "updatedAt": "2025-12-09T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m04",
          "assigneeId": "m08",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        }
      ]
    },
    {
      "state": "IN_PROGRESS",
      "count": 17,
      "issues": [
        {
          "id": "i100",
          "key": "ING-100",
          "title": "Document the batch planner under load",
          "description": "Document the retry budget.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-11T09:00:00.000Z",
          "updatedAt": "2025-12-12T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m03",
          "assigneeId": "m03",
          "labelIds": [
            "l05",
            "l08"
          ],
          "parentId": "i098",
          "attachments": [
            {
              "filename": "trace-100.json",
              "contentType": "application/json",
              "size": 402342,
              "url": "https://files.example.com/trace-100.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i090",
          "key": "ING-90",
          "title": "Investigate keep-alives on reconnect",
          "description": "Harden the retry budget.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "URGENT",
          "estimate": 5,
          "createdAt": "2025-12-10T23:00:00.000Z",
          "updatedAt": "2025-12-12T00:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m07",
          "assigneeId": null,
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-090.json",
              "contentType": "application/json",
              "size": 255690,
              "url": "https://files.example.com/trace-090.json"
            }
          ],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i067",
          "key": "ING-67",
          "title": "Harden the batch planner behind a proxy",
          "description": "Fix the retry budget.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "MEDIUM",
          "estimate": 13,
          "createdAt": "2025-12-10T00:00:00.000Z",
          "updatedAt": "2025-12-10T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m12",
          "labelIds": [
            "l09",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i065",
          "key": "ING-65",
          "title": "Measure the batch planner on reconnect",
          "description": "Fix policy pushdown.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-09T22:00:00.000Z",
          "updatedAt": "2025-12-10T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m01",
          "labelIds": [
            "l02",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i064",
          "key": "ING-64",
          "title": "Remove keep-alives in the Kotlin runtime",
          "description": "Document keep-alives.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-09T21:00:00.000Z",
          "updatedAt": "2025-12-10T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m04",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l05",
            "l06"
          ],
          "parentId": "i056",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i061",
          "key": "ING-61",
          "title": "Retry keep-alives on reconnect",
          "description": "Measure the batch planner.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "HIGH",
          "estimate": 3,
          "createdAt": "2025-12-09T18:00:00.000Z",
          "updatedAt": "2025-12-09T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m08",
          "assigneeId": "m08",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i058",
          "key": "ING-58",
          "title": "Refactor the batch planner for large pages",
          "description": "Refactor cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-09T15:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m08",
          "assigneeId": "m07",
          "labelIds": [
            "l02",
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i050",
          "key": "ING-50",
          "title": "Refactor policy pushdown for large pages",
          "description": "Add the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "HIGH",
          "estimate": 1,
          "createdAt": "2025-12-09T07:00:00.000Z",
          "updatedAt": "2025-12-09T10:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m05",
          "assigneeId": "m02",
          "labelIds": [
            "l04",
            "l08",
            "l10"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-050.json",
              "contentType": "application/json",
              "size": 362494,
              "url": "https://files.example.com/trace-050.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i030",
          "key": "ING-30",
          "title": "Fix cursor pagination for large pages",
          "description": "Harden keep-alives.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-08T11:00:00.000Z",
          "updatedAt": "2025-12-09T12:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m09",
          "assigneeId": "m02",
          "labelIds": [
            "l02",
            "l04"
          ],
          "parentId": "i023",
          "attachments": [
            {
              "filename": "trace-030.json",
              "contentType": "application/json",
              "size": 141270,
              "url": "https://files.example.com/trace-030.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i026",
          "key": "ING-26",
          "title": "Retry keep-alives on reconnect",
          "description": "Remove the idempotency store.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "NONE",
          "estimate": 2,
          "createdAt": "2025-12-08T07:00:00.000Z",
          "updatedAt": "2025-12-09T00:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m10",
          "assigneeId": "m03",
          "labelIds": [
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        }
      ]
    },
    {
      "state": "IN_REVIEW",
      "count": 9,
      "issues": [
        {
          "id": "i091",
          "key": "ING-91",
          "title": "Refactor the retry budget after a redeploy",
          "description": "Cache the idempotency store.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T00:00:00.000Z",
          "updatedAt": "2025-12-12T04:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m01",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i087",
          "key": "ING-87",
          "title": "Measure the WebSocket transport for offline clients",
          "description": "Cache the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "NONE",
          "estimate": 13,
          "createdAt": "2025-12-10T20:00:00.000Z",
          "updatedAt": "2025-12-11T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l05",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i082",
          "key": "ING-82",
          "title": "Retry the WebSocket transport in the Kotlin runtime",
          "description": "Refactor policy pushdown.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-10T15:00:00.000Z",
          "updatedAt": "2025-12-10T19:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l04",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i072",
          "key": "ING-72",
          "title": "Investigate policy pushdown for offline clients",
          "description": "Refactor the retry budget.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "MEDIUM",
          "estimate": 3,
          "createdAt": "2025-12-10T05:00:00.000Z",
          "updatedAt": "2025-12-10T20:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m10",
          "labelIds": [
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i063",
          "key": "ING-63",
          "title": "Retry the batch planner for large pages",
          "description": "Add schema reload.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-09T20:00:00.000Z",
          "updatedAt": "2025-12-10T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m11",
          "assigneeId": "m08",
          "labelIds": [
            "l05",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i060",
          "key": "ING-60",
          "title": "Measure cold starts under load",
          "description": "Refactor policy pushdown.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-09T17:00:00.000Z",
          "updatedAt": "2025-12-10T01:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": "m01",
          "labelIds": [
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-060.json",
              "contentType": "application/json",
              "size": 301630,
              "url": "https://files.example.com/trace-060.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i054",
          "key": "ING-54",
          "title": "Measure the idempotency store in the Kotlin runtime",
          "description": "Harden cold starts.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-09T11:00:00.000Z",
          "updatedAt": "2025-12-10T23:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m08",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l05",
            "l07"
          ],
          "parentId": "i050",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i016",
          "key": "ING-16",
          "title": "Measure the shape registry on slow networks",
          "description": "Harden the batch planner.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 8,
          "createdAt": "2025-12-07T21:00:00.000Z",
          "updatedAt": "2025-12-08T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m05",
          "assigneeId": "m10",
          "labelIds": [
            "l01",
            "l02"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            }
          ]
        },
        {
          "id": "i010",
          "key": "ING-10",
          "title": "Refactor cursor pagination on reconnect",
          "description": "Fix the WebSocket transport.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "URGENT",
          "estimate": 3,
          "createdAt": "2025-12-07T15:00:00.000Z",
          "updatedAt": "2025-12-07T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m08",
          "assigneeId": "m05",
          "labelIds": [
            "l02",
            "l08"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-010.json",
              "contentType": "application/json",
              "size": 366443,
              "url": "https://files.example.com/trace-010.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m05",
            "role": "MEMBER",
            "user": {
              "id": "u05",
              "name": "Barbara Liskov",
              "avatarUrl": "https://avatars.example.com/u05.png",
              "email": "barbara.liskov@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        }
      ]
    },
    {
      "state": "DONE",
      "count": 15,
      "issues": [
        {
          "id": "i098",
          "key": "ING-98",
          "title": "Investigate policy pushdown behind a proxy",
          "description": "Add cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-11T07:00:00.000Z",
          "updatedAt": "2025-12-11T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": null,
          "labelIds": [],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": null,
          "labels": []
        },
        {
          "id": "i097",
          "key": "ING-97",
          "title": "Refactor the idempotency store on slow networks",
          "description": "Refactor the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T06:00:00.000Z",
          "updatedAt": "2025-12-11T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m10",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i096",
          "key": "ING-96",
          "title": "Add cursor pagination behind a proxy",
          "description": "Remove keep-alives.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-11T05:00:00.000Z",
          "updatedAt": "2025-12-12T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": null,
          "labelIds": [
            "l04",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i095",
          "key": "ING-95",
          "title": "Document the retry budget for large pages",
          "description": "Measure keep-alives.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-11T04:00:00.000Z",
          "updatedAt": "2025-12-11T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m09",
          "assigneeId": null,
          "labelIds": [
            "l02",
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i088",
          "key": "ING-88",
          "title": "Remove schema reload for large pages",
          "description": "Retry keep-alives.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "URGENT",
          "estimate": null,
          "createdAt": "2025-12-10T21:00:00.000Z",
          "updatedAt": "2025-12-11T12:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m03",
          "labelIds": [
            "l01",
            "l05",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i081",
          "key": "ING-81",
          "title": "Add the idempotency store for offline clients",
          "description": "Add schema reload.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-10T14:00:00.000Z",
          "updatedAt": "2025-12-11T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m06",
          "assigneeId": "m01",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i073",
          "key": "ING-73",
          "title": "Document policy pushdown for offline clients",
          "description": "Remove the WebSocket transport.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-10T06:00:00.000Z",
          "updatedAt": "2025-12-11T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m06",
          "assigneeId": "m10",
          "labelIds": [
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i068",
          "key": "ING-68",
          "title": "Measure keep-alives behind a proxy",
          "description": "Measure cold starts.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-10T01:00:00.000Z",
          "updatedAt": "2025-12-10T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m03",
          "labelIds": [
            "l04"
          ],
          "parentId": "i067",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i051",
          "key": "ING-51",
          "title": "Retry the shape registry for offline clients",
          "description": "Refactor cold starts.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-09T08:00:00.000Z",
          "updatedAt": "2025-12-10T23:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m06",
          "assigneeId": "m12",
          "labelIds": [
            "l02",
            "l03",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i048",
          "key": "ING-48",
          "title": "Cache schema reload for large pages",
          "description": "Investigate the retry budget.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "URGENT",
          "estimate": null,
          "createdAt": "2025-12-09T05:00:00.000Z",
          "updatedAt": "2025-12-10T20:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        }
      ]
    }
  ]
}
GET /events
authorization: Bearer u01
200 OK
cache-control: no-cache
content-type: text/event-stream

: open

data: {"event":"IssueMoved","issueId":"i078","from":"TODO","to":"IN_PROGRESS"}


(stream closed by the client)
2 more requests
POST /issues/i078/move
authorization: Bearer u01
content-type: application/json

{
  "to": "IN_PROGRESS"
}
200 OK
content-type: application/json

{
  "id": "i078",
  "key": "ING-78",
  "title": "Refactor the WebSocket transport on reconnect",
  "description": "Fix the shape registry.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "IN_PROGRESS",
  "priority": "NONE",
  "estimate": 1,
  "createdAt": "2025-12-10T11:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 2,
  "projectId": "p1",
  "sprintId": "s03",
  "reporterId": "m12",
  "assigneeId": "m02",
  "labelIds": [
... 29 more lines
Full response body
{
  "id": "i078",
  "key": "ING-78",
  "title": "Refactor the WebSocket transport on reconnect",
  "description": "Fix the shape registry.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "IN_PROGRESS",
  "priority": "NONE",
  "estimate": 1,
  "createdAt": "2025-12-10T11:00:00.000Z",
  "updatedAt": "2026-02-01T12:00:00.000Z",
  "version": 2,
  "projectId": "p1",
  "sprintId": "s03",
  "reporterId": "m12",
  "assigneeId": "m02",
  "labelIds": [
    "l04",
    "l10"
  ],
  "parentId": null,
  "attachments": [],
  "externalState": null,
  "assignee": {
    "id": "m02",
    "role": "ADMIN",
    "user": {
      "id": "u02",
      "name": "Grace Hopper",
      "avatarUrl": "https://avatars.example.com/u02.png",
      "email": "grace.hopper@acme.example"
    }
  },
  "labels": [
    {
      "id": "l04",
      "name": "docs",
      "color": "#0075ca"
    },
    {
      "id": "l10",
      "name": "regression",
      "color": "#e99695"
    }
  ]
}
GET /projects/p1/board?limit=10
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "aa4981a78d4dd542"

{
  "project": {
    "id": "p1",
    "key": "ING",
    "name": "Ingest pipeline",
    "status": "ACTIVE",
    "startDate": "2026-01-05",
    "targetDate": "2026-03-15",
    "teamId": "t1",
    "leadId": "m01"
  },
  "columns": [
    {
      "state": "TRIAGE",
      "count": 20,
      "issues": [
... 2574 more lines
Full response body
{
  "project": {
    "id": "p1",
    "key": "ING",
    "name": "Ingest pipeline",
    "status": "ACTIVE",
    "startDate": "2026-01-05",
    "targetDate": "2026-03-15",
    "teamId": "t1",
    "leadId": "m01"
  },
  "columns": [
    {
      "state": "TRIAGE",
      "count": 20,
      "issues": [
        {
          "id": "i093",
          "key": "ING-93",
          "title": "Retry the retry budget in the Kotlin runtime",
          "description": "Fix policy pushdown.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T02:00:00.000Z",
          "updatedAt": "2025-12-11T18:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m09",
          "assigneeId": "m04",
          "labelIds": [
            "l01"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m04",
            "role": "MEMBER",
            "user": {
              "id": "u04",
              "name": "Katherine Johnson",
              "avatarUrl": null,
              "email": "katherine.johnson@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            }
          ]
        },
        {
          "id": "i086",
          "key": "ING-86",
          "title": "Remove schema reload after a redeploy",
          "description": "Cache cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-10T19:00:00.000Z",
          "updatedAt": "2025-12-12T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m12",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i085",
          "key": "ING-85",
          "title": "Remove schema reload for offline clients",
          "description": "Cache the idempotency store.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 3,
          "createdAt": "2025-12-10T18:00:00.000Z",
          "updatedAt": "2025-12-11T01:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m07",
          "assigneeId": "m08",
          "labelIds": [
            "l01",
            "l05",
            "l10"
          ],
          "parentId": "i080",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i076",
          "key": "ING-76",
          "title": "Fix cold starts on reconnect",
          "description": "Cache schema reload.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 3,
          "createdAt": "2025-12-10T09:00:00.000Z",
          "updatedAt": "2025-12-11T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m07",
          "labelIds": [
            "l07",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i075",
          "key": "ING-75",
          "title": "Document the retry budget on reconnect",
          "description": "Remove the shape registry.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 5,
          "createdAt": "2025-12-10T08:00:00.000Z",
          "updatedAt": "2025-12-11T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m04",
          "assigneeId": "m10",
          "labelIds": [
            "l01",
            "l07",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i070",
          "key": "ING-70",
          "title": "Document schema reload for large pages",
          "description": "Retry policy pushdown.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-10T03:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m04",
          "labelIds": [
            "l05",
            "l07"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-070.json",
              "contentType": "application/json",
              "size": 378856,
              "url": "https://files.example.com/trace-070.json"
            }
          ],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m04",
            "role": "MEMBER",
            "user": {
              "id": "u04",
              "name": "Katherine Johnson",
              "avatarUrl": null,
              "email": "katherine.johnson@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i052",
          "key": "ING-52",
          "title": "Document cold starts for offline clients",
          "description": "Measure cold starts.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "NONE",
          "estimate": 5,
          "createdAt": "2025-12-09T09:00:00.000Z",
          "updatedAt": "2025-12-10T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m08",
          "assigneeId": "m12",
          "labelIds": [
            "l03",
            "l06",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i047",
          "key": "ING-47",
          "title": "Fix keep-alives after a redeploy",
          "description": "Document keep-alives.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-09T04:00:00.000Z",
          "updatedAt": "2025-12-10T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m11",
          "labelIds": [
            "l02",
            "l06",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m11",
            "role": "MEMBER",
            "user": {
              "id": "u11",
              "name": "Anita Borg",
              "avatarUrl": "https://avatars.example.com/u11.png",
              "email": "anita.borg@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i046",
          "key": "ING-46",
          "title": "Retry keep-alives for large pages",
          "description": "Harden the WebSocket transport.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": 5,
          "createdAt": "2025-12-09T03:00:00.000Z",
          "updatedAt": "2025-12-09T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m09",
          "labelIds": [
            "l06",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i043",
          "key": "ING-43",
          "title": "Fix the WebSocket transport for large pages",
          "description": "Cache the batch planner.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TRIAGE",
          "priority": "MEDIUM",
          "estimate": 5,
          "createdAt": "2025-12-09T00:00:00.000Z",
          "updatedAt": "2025-12-09T17:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": "m11",
          "labelIds": [
            "l02",
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m11",
            "role": "MEMBER",
            "user": {
              "id": "u11",
              "name": "Anita Borg",
              "avatarUrl": "https://avatars.example.com/u11.png",
              "email": "anita.borg@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        }
      ]
    },
    {
      "state": "BACKLOG",
      "count": 15,
      "issues": [
        {
          "id": "i094",
          "key": "ING-94",
          "title": "Retry keep-alives behind a proxy",
          "description": "Fix the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "MEDIUM",
          "estimate": 2,
          "createdAt": "2025-12-11T03:00:00.000Z",
          "updatedAt": "2025-12-11T17:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m03",
          "labelIds": [
            "l04"
          ],
          "parentId": "i093",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i092",
          "key": "ING-92",
          "title": "Refactor the WebSocket transport after a redeploy",
          "description": "Document the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 1,
          "createdAt": "2025-12-11T01:00:00.000Z",
          "updatedAt": "2025-12-12T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": "m06",
          "labelIds": [
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m06",
            "role": "MEMBER",
            "user": {
              "id": "u06",
              "name": "Edsger Dijkstra",
              "avatarUrl": "https://avatars.example.com/u06.png",
              "email": "edsger.dijkstra@acme.example"
            }
          },
          "labels": [
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i089",
          "key": "ING-89",
          "title": "Document cold starts for large pages",
          "description": "Fix the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "MEDIUM",
          "estimate": 2,
          "createdAt": "2025-12-10T22:00:00.000Z",
          "updatedAt": "2025-12-12T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i083",
          "key": "ING-83",
          "title": "Document the retry budget under load",
          "description": "Add policy pushdown.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-10T16:00:00.000Z",
          "updatedAt": "2025-12-11T03:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": "m12",
          "labelIds": [
            "l01",
            "l03",
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i079",
          "key": "ING-79",
          "title": "Remove cursor pagination behind a proxy",
          "description": "Measure the shape registry.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-10T12:00:00.000Z",
          "updatedAt": "2025-12-12T03:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l10"
          ],
          "parentId": "i072",
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i071",
          "key": "ING-71",
          "title": "Remove the idempotency store behind a proxy",
          "description": "Remove schema reload.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 2,
          "createdAt": "2025-12-10T04:00:00.000Z",
          "updatedAt": "2025-12-10T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m01",
          "assigneeId": "m12",
          "labelIds": [],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": []
        },
        {
          "id": "i069",
          "key": "ING-69",
          "title": "Retry the batch planner after a redeploy",
          "description": "Fix the WebSocket transport.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "HIGH",
          "estimate": 3,
          "createdAt": "2025-12-10T02:00:00.000Z",
          "updatedAt": "2025-12-11T13:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i055",
          "key": "ING-55",
          "title": "Harden the retry budget for offline clients",
          "description": "Cache the retry budget.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 5,
          "createdAt": "2025-12-09T12:00:00.000Z",
          "updatedAt": "2025-12-10T08:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m10",
          "assigneeId": "m08",
          "labelIds": [
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i041",
          "key": "ING-41",
          "title": "Investigate the shape registry under load",
          "description": "Remove cursor pagination.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "LOW",
          "estimate": 5,
          "createdAt": "2025-12-08T22:00:00.000Z",
          "updatedAt": "2025-12-10T10:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m02",
          "assigneeId": null,
          "labelIds": [
            "l03",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i040",
          "key": "ING-40",
          "title": "Document schema reload in the Kotlin runtime",
          "description": "Refactor schema reload.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "BACKLOG",
          "priority": "URGENT",
          "estimate": 5,
          "createdAt": "2025-12-08T21:00:00.000Z",
          "updatedAt": "2025-12-09T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": null,
          "reporterId": "m07",
          "assigneeId": "m12",
          "labelIds": [
            "l06",
            "l09"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-040.json",
              "contentType": "application/json",
              "size": 201090,
              "url": "https://files.example.com/trace-040.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        }
      ]
    },
    {
      "state": "TODO",
      "count": 8,
      "issues": [
        {
          "id": "i077",
          "key": "ING-77",
          "title": "Remove the batch planner for large pages",
          "description": "Measure the idempotency store.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "MEDIUM",
          "estimate": 3,
          "createdAt": "2025-12-10T10:00:00.000Z",
          "updatedAt": "2025-12-11T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m12",
          "assigneeId": null,
          "labelIds": [
            "l01",
            "l07",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": null,
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i066",
          "key": "ING-66",
          "title": "Retry the idempotency store under load",
          "description": "Cache cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-09T23:00:00.000Z",
          "updatedAt": "2025-12-10T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m12",
          "assigneeId": "m09",
          "labelIds": [
            "l03"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            }
          ]
        },
        {
          "id": "i049",
          "key": "ING-49",
          "title": "Refactor policy pushdown on reconnect",
          "description": "Remove schema reload.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "MEDIUM",
          "estimate": 8,
          "createdAt": "2025-12-09T06:00:00.000Z",
          "updatedAt": "2025-12-10T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m02",
          "assigneeId": "m08",
          "labelIds": [
            "l01",
            "l06",
            "l07"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i038",
          "key": "ING-38",
          "title": "Document schema reload on slow networks",
          "description": "Remove the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "LOW",
          "estimate": 1,
          "createdAt": "2025-12-08T19:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m12",
          "assigneeId": "m06",
          "labelIds": [
            "l01",
            "l03",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m06",
            "role": "MEMBER",
            "user": {
              "id": "u06",
              "name": "Edsger Dijkstra",
              "avatarUrl": "https://avatars.example.com/u06.png",
              "email": "edsger.dijkstra@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i037",
          "key": "ING-37",
          "title": "Remove policy pushdown for large pages",
          "description": "Document the batch planner.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-08T18:00:00.000Z",
          "updatedAt": "2025-12-09T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": "m10",
          "labelIds": [
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i036",
          "key": "ING-36",
          "title": "Fix policy pushdown behind a proxy",
          "description": "Add cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-08T17:00:00.000Z",
          "updatedAt": "2025-12-10T05:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m12",
          "assigneeId": "m09",
          "labelIds": [],
          "parentId": "i026",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m09",
            "role": "MEMBER",
            "user": {
              "id": "u09",
              "name": "Margaret Hamilton",
              "avatarUrl": "https://avatars.example.com/u09.png",
              "email": "margaret.hamilton@acme.example"
            }
          },
          "labels": []
        },
        {
          "id": "i028",
          "key": "ING-28",
          "title": "Retry the shape registry in the Kotlin runtime",
          "description": "Refactor cursor pagination.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "URGENT",
          "estimate": 8,
          "createdAt": "2025-12-08T09:00:00.000Z",
          "updatedAt": "2025-12-08T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": "m12",
          "labelIds": [
            "l02",
            "l03",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i025",
          "key": "ING-25",
          "title": "Fix policy pushdown under load",
          "description": "Measure the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "TODO",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-08T06:00:00.000Z",
          "updatedAt": "2025-12-09T15:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m04",
          "assigneeId": "m08",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        }
      ]
    },
    {
      "state": "IN_PROGRESS",
      "count": 18,
      "issues": [
        {
          "id": "i078",
          "key": "ING-78",
          "title": "Refactor the WebSocket transport on reconnect",
          "description": "Fix the shape registry.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "NONE",
          "estimate": 1,
          "createdAt": "2025-12-10T11:00:00.000Z",
          "updatedAt": "2026-02-01T12:00:00.000Z",
          "version": 2,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m12",
          "assigneeId": "m02",
          "labelIds": [
            "l04",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i100",
          "key": "ING-100",
          "title": "Document the batch planner under load",
          "description": "Document the retry budget.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-11T09:00:00.000Z",
          "updatedAt": "2025-12-12T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m03",
          "assigneeId": "m03",
          "labelIds": [
            "l05",
            "l08"
          ],
          "parentId": "i098",
          "attachments": [
            {
              "filename": "trace-100.json",
              "contentType": "application/json",
              "size": 402342,
              "url": "https://files.example.com/trace-100.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i090",
          "key": "ING-90",
          "title": "Investigate keep-alives on reconnect",
          "description": "Harden the retry budget.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "URGENT",
          "estimate": 5,
          "createdAt": "2025-12-10T23:00:00.000Z",
          "updatedAt": "2025-12-12T00:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m07",
          "assigneeId": null,
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-090.json",
              "contentType": "application/json",
              "size": 255690,
              "url": "https://files.example.com/trace-090.json"
            }
          ],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i067",
          "key": "ING-67",
          "title": "Harden the batch planner behind a proxy",
          "description": "Fix the retry budget.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "MEDIUM",
          "estimate": 13,
          "createdAt": "2025-12-10T00:00:00.000Z",
          "updatedAt": "2025-12-10T09:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m12",
          "labelIds": [
            "l09",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i065",
          "key": "ING-65",
          "title": "Measure the batch planner on reconnect",
          "description": "Fix policy pushdown.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "NONE",
          "estimate": null,
          "createdAt": "2025-12-09T22:00:00.000Z",
          "updatedAt": "2025-12-10T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m01",
          "labelIds": [
            "l02",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i064",
          "key": "ING-64",
          "title": "Remove keep-alives in the Kotlin runtime",
          "description": "Document keep-alives.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-09T21:00:00.000Z",
          "updatedAt": "2025-12-10T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m04",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l05",
            "l06"
          ],
          "parentId": "i056",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i061",
          "key": "ING-61",
          "title": "Retry keep-alives on reconnect",
          "description": "Measure the batch planner.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "HIGH",
          "estimate": 3,
          "createdAt": "2025-12-09T18:00:00.000Z",
          "updatedAt": "2025-12-09T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m08",
          "assigneeId": "m08",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i058",
          "key": "ING-58",
          "title": "Refactor the batch planner for large pages",
          "description": "Refactor cold starts.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-09T15:00:00.000Z",
          "updatedAt": "2025-12-10T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m08",
          "assigneeId": "m07",
          "labelIds": [
            "l02",
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i050",
          "key": "ING-50",
          "title": "Refactor policy pushdown for large pages",
          "description": "Add the shape registry.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "HIGH",
          "estimate": 1,
          "createdAt": "2025-12-09T07:00:00.000Z",
          "updatedAt": "2025-12-09T10:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m05",
          "assigneeId": "m02",
          "labelIds": [
            "l04",
            "l08",
            "l10"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-050.json",
              "contentType": "application/json",
              "size": 362494,
              "url": "https://files.example.com/trace-050.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i030",
          "key": "ING-30",
          "title": "Fix cursor pagination for large pages",
          "description": "Harden keep-alives.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_PROGRESS",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-08T11:00:00.000Z",
          "updatedAt": "2025-12-09T12:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m09",
          "assigneeId": "m02",
          "labelIds": [
            "l02",
            "l04"
          ],
          "parentId": "i023",
          "attachments": [
            {
              "filename": "trace-030.json",
              "contentType": "application/json",
              "size": 141270,
              "url": "https://files.example.com/trace-030.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m02",
            "role": "ADMIN",
            "user": {
              "id": "u02",
              "name": "Grace Hopper",
              "avatarUrl": "https://avatars.example.com/u02.png",
              "email": "grace.hopper@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        }
      ]
    },
    {
      "state": "IN_REVIEW",
      "count": 9,
      "issues": [
        {
          "id": "i091",
          "key": "ING-91",
          "title": "Refactor the retry budget after a redeploy",
          "description": "Cache the idempotency store.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T00:00:00.000Z",
          "updatedAt": "2025-12-12T04:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m01",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i087",
          "key": "ING-87",
          "title": "Measure the WebSocket transport for offline clients",
          "description": "Cache the WebSocket transport.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "NONE",
          "estimate": 13,
          "createdAt": "2025-12-10T20:00:00.000Z",
          "updatedAt": "2025-12-11T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m05",
          "assigneeId": null,
          "labelIds": [
            "l05",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i082",
          "key": "ING-82",
          "title": "Retry the WebSocket transport in the Kotlin runtime",
          "description": "Refactor policy pushdown.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-10T15:00:00.000Z",
          "updatedAt": "2025-12-10T19:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l04",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i072",
          "key": "ING-72",
          "title": "Investigate policy pushdown for offline clients",
          "description": "Refactor the retry budget.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "MEDIUM",
          "estimate": 3,
          "createdAt": "2025-12-10T05:00:00.000Z",
          "updatedAt": "2025-12-10T20:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m10",
          "labelIds": [
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i063",
          "key": "ING-63",
          "title": "Retry the batch planner for large pages",
          "description": "Add schema reload.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-09T20:00:00.000Z",
          "updatedAt": "2025-12-10T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m11",
          "assigneeId": "m08",
          "labelIds": [
            "l05",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i060",
          "key": "ING-60",
          "title": "Measure cold starts under load",
          "description": "Refactor policy pushdown.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "URGENT",
          "estimate": 2,
          "createdAt": "2025-12-09T17:00:00.000Z",
          "updatedAt": "2025-12-10T01:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": "m01",
          "labelIds": [
            "l03",
            "l08"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-060.json",
              "contentType": "application/json",
              "size": 301630,
              "url": "https://files.example.com/trace-060.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        },
        {
          "id": "i054",
          "key": "ING-54",
          "title": "Measure the idempotency store in the Kotlin runtime",
          "description": "Harden cold starts.\n\nSeen after a redeploy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-09T11:00:00.000Z",
          "updatedAt": "2025-12-10T23:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m08",
          "assigneeId": "m08",
          "labelIds": [
            "l03",
            "l05",
            "l07"
          ],
          "parentId": "i050",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m08",
            "role": "MEMBER",
            "user": {
              "id": "u08",
              "name": "Tim Berners-Lee",
              "avatarUrl": "https://avatars.example.com/u08.png",
              "email": "tim.berners.lee@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l07",
              "name": "ux",
              "color": "#d4c5f9"
            }
          ]
        },
        {
          "id": "i016",
          "key": "ING-16",
          "title": "Measure the shape registry on slow networks",
          "description": "Harden the batch planner.\n\nSeen under load: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "LOW",
          "estimate": 8,
          "createdAt": "2025-12-07T21:00:00.000Z",
          "updatedAt": "2025-12-08T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m05",
          "assigneeId": "m10",
          "labelIds": [
            "l01",
            "l02"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            }
          ]
        },
        {
          "id": "i010",
          "key": "ING-10",
          "title": "Refactor cursor pagination on reconnect",
          "description": "Fix the WebSocket transport.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "IN_REVIEW",
          "priority": "URGENT",
          "estimate": 3,
          "createdAt": "2025-12-07T15:00:00.000Z",
          "updatedAt": "2025-12-07T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m08",
          "assigneeId": "m05",
          "labelIds": [
            "l02",
            "l08"
          ],
          "parentId": null,
          "attachments": [
            {
              "filename": "trace-010.json",
              "contentType": "application/json",
              "size": 366443,
              "url": "https://files.example.com/trace-010.json"
            }
          ],
          "externalState": null,
          "assignee": {
            "id": "m05",
            "role": "MEMBER",
            "user": {
              "id": "u05",
              "name": "Barbara Liskov",
              "avatarUrl": "https://avatars.example.com/u05.png",
              "email": "barbara.liskov@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            }
          ]
        }
      ]
    },
    {
      "state": "DONE",
      "count": 15,
      "issues": [
        {
          "id": "i098",
          "key": "ING-98",
          "title": "Investigate policy pushdown behind a proxy",
          "description": "Add cold starts.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-11T07:00:00.000Z",
          "updatedAt": "2025-12-11T22:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": null,
          "labelIds": [],
          "parentId": null,
          "attachments": [],
          "externalState": "SYNCED",
          "assignee": null,
          "labels": []
        },
        {
          "id": "i097",
          "key": "ING-97",
          "title": "Refactor the idempotency store on slow networks",
          "description": "Refactor the batch planner.\n\nSeen for offline clients: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "LOW",
          "estimate": null,
          "createdAt": "2025-12-11T06:00:00.000Z",
          "updatedAt": "2025-12-11T07:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m10",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i096",
          "key": "ING-96",
          "title": "Add cursor pagination behind a proxy",
          "description": "Remove keep-alives.\n\nSeen on reconnect: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-11T05:00:00.000Z",
          "updatedAt": "2025-12-12T02:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m07",
          "assigneeId": null,
          "labelIds": [
            "l04",
            "l08",
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            },
            {
              "id": "l08",
              "name": "infra",
              "color": "#5319e7"
            },
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i095",
          "key": "ING-95",
          "title": "Document the retry budget for large pages",
          "description": "Measure keep-alives.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "MEDIUM",
          "estimate": null,
          "createdAt": "2025-12-11T04:00:00.000Z",
          "updatedAt": "2025-12-11T06:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m09",
          "assigneeId": null,
          "labelIds": [
            "l02",
            "l05",
            "l06"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": null,
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l06",
              "name": "security",
              "color": "#b60205"
            }
          ]
        },
        {
          "id": "i088",
          "key": "ING-88",
          "title": "Remove schema reload for large pages",
          "description": "Retry keep-alives.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "URGENT",
          "estimate": null,
          "createdAt": "2025-12-10T21:00:00.000Z",
          "updatedAt": "2025-12-11T12:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m11",
          "assigneeId": "m03",
          "labelIds": [
            "l01",
            "l05",
            "l10"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l01",
              "name": "bug",
              "color": "#d73a4a"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            },
            {
              "id": "l10",
              "name": "regression",
              "color": "#e99695"
            }
          ]
        },
        {
          "id": "i081",
          "key": "ING-81",
          "title": "Add the idempotency store for offline clients",
          "description": "Add schema reload.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": null,
          "createdAt": "2025-12-10T14:00:00.000Z",
          "updatedAt": "2025-12-11T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s02",
          "reporterId": "m06",
          "assigneeId": "m01",
          "labelIds": [
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m01",
            "role": "OWNER",
            "user": {
              "id": "u01",
              "name": "Ada Lovelace",
              "avatarUrl": null,
              "email": "ada.lovelace@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i073",
          "key": "ING-73",
          "title": "Document policy pushdown for offline clients",
          "description": "Remove the WebSocket transport.\n\nSeen on slow networks: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "LOW",
          "estimate": 3,
          "createdAt": "2025-12-10T06:00:00.000Z",
          "updatedAt": "2025-12-11T14:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m06",
          "assigneeId": "m10",
          "labelIds": [
            "l09"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m10",
            "role": "MEMBER",
            "user": {
              "id": "u10",
              "name": "Vint Cerf",
              "avatarUrl": null,
              "email": "vint.cerf@acme.example"
            }
          },
          "labels": [
            {
              "id": "l09",
              "name": "flaky",
              "color": "#fbca04"
            }
          ]
        },
        {
          "id": "i068",
          "key": "ING-68",
          "title": "Measure keep-alives behind a proxy",
          "description": "Measure cold starts.\n\nSeen in the Kotlin runtime: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-10T01:00:00.000Z",
          "updatedAt": "2025-12-10T16:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m03",
          "assigneeId": "m03",
          "labelIds": [
            "l04"
          ],
          "parentId": "i067",
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m03",
            "role": "MEMBER",
            "user": {
              "id": "u03",
              "name": "Alan Turing",
              "avatarUrl": "https://avatars.example.com/u03.png",
              "email": "alan.turing@acme.example"
            }
          },
          "labels": [
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        },
        {
          "id": "i051",
          "key": "ING-51",
          "title": "Retry the shape registry for offline clients",
          "description": "Refactor cold starts.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "HIGH",
          "estimate": 5,
          "createdAt": "2025-12-09T08:00:00.000Z",
          "updatedAt": "2025-12-10T23:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s03",
          "reporterId": "m06",
          "assigneeId": "m12",
          "labelIds": [
            "l02",
            "l03",
            "l05"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m12",
            "role": "GUEST",
            "user": {
              "id": "u12",
              "name": "Leslie Lamport",
              "avatarUrl": "https://avatars.example.com/u12.png",
              "email": "leslie.lamport@acme.example"
            }
          },
          "labels": [
            {
              "id": "l02",
              "name": "feature",
              "color": "#0e8a16"
            },
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l05",
              "name": "performance",
              "color": "#a2eeef"
            }
          ]
        },
        {
          "id": "i048",
          "key": "ING-48",
          "title": "Cache schema reload for large pages",
          "description": "Investigate the retry budget.\n\nSeen behind a proxy: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
          "state": "DONE",
          "priority": "URGENT",
          "estimate": null,
          "createdAt": "2025-12-09T05:00:00.000Z",
          "updatedAt": "2025-12-10T20:00:00.000Z",
          "version": 1,
          "projectId": "p1",
          "sprintId": "s01",
          "reporterId": "m11",
          "assigneeId": "m07",
          "labelIds": [
            "l03",
            "l04"
          ],
          "parentId": null,
          "attachments": [],
          "externalState": null,
          "assignee": {
            "id": "m07",
            "role": "MEMBER",
            "user": {
              "id": "u07",
              "name": "Radia Perlman",
              "avatarUrl": null,
              "email": "radia.perlman@acme.example"
            }
          },
          "labels": [
            {
              "id": "l03",
              "name": "chore",
              "color": "#cfd3d7"
            },
            {
              "id": "l04",
              "name": "docs",
              "color": "#0075ca"
            }
          ]
        }
      ]
    }
  ]
}

GraphQL 3 requests

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "subscription { projectFeed(projectId: \"p1\") { issueId from to } }"
}
200 OK
cache-control: no-store
content-type: text/event-stream

: subscribed

data: {"data":{"projectFeed":{"issueId":"i078","from":"TODO","to":"IN_PROGRESS"}}}


(stream closed by the client)
POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "mutation { moveIssue(id: \"i078\", to: IN_PROGRESS) { version } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "moveIssue": {
      "version": 2
    }
  }
}
1 more request
POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ board(projectId: \"p1\") { project { key name } columns { state count issues(first: 10) { items { id key title state priority updatedAt assignee { id role user { id name avatarUrl } } labels { id name color } } } } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "board": {
      "project": {
        "key": "ING",
        "name": "Ingest pipeline"
      },
      "columns": [
        {
          "state": "TRIAGE",
          "count": 20,
          "issues": {
            "items": [
              {
                "id": "i093",
                "key": "ING-93",
... 1626 more lines
Full response body
{
  "data": {
    "board": {
      "project": {
        "key": "ING",
        "name": "Ingest pipeline"
      },
      "columns": [
        {
          "state": "TRIAGE",
          "count": 20,
          "issues": {
            "items": [
              {
                "id": "i093",
                "key": "ING-93",
                "title": "Retry the retry budget in the Kotlin runtime",
                "state": "TRIAGE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T18:00:00.000Z",
                "assignee": {
                  "id": "m04",
                  "role": "MEMBER",
                  "user": {
                    "id": "u04",
                    "name": "Katherine Johnson",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  }
                ]
              },
              {
                "id": "i086",
                "key": "ING-86",
                "title": "Remove schema reload after a redeploy",
                "state": "TRIAGE",
                "priority": "URGENT",
                "updatedAt": "2025-12-12T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i085",
                "key": "ING-85",
                "title": "Remove schema reload for offline clients",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T01:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i076",
                "key": "ING-76",
                "title": "Fix cold starts on reconnect",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T07:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i075",
                "key": "ING-75",
                "title": "Document the retry budget on reconnect",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-11T13:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i070",
                "key": "ING-70",
                "title": "Document schema reload for large pages",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m04",
                  "role": "MEMBER",
                  "user": {
                    "id": "u04",
                    "name": "Katherine Johnson",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i052",
                "key": "ING-52",
                "title": "Document cold starts for offline clients",
                "state": "TRIAGE",
                "priority": "NONE",
                "updatedAt": "2025-12-10T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i047",
                "key": "ING-47",
                "title": "Fix keep-alives after a redeploy",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T15:00:00.000Z",
                "assignee": {
                  "id": "m11",
                  "role": "MEMBER",
                  "user": {
                    "id": "u11",
                    "name": "Anita Borg",
                    "avatarUrl": "https://avatars.example.com/u11.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i046",
                "key": "ING-46",
                "title": "Retry keep-alives for large pages",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-09T13:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i043",
                "key": "ING-43",
                "title": "Fix the WebSocket transport for large pages",
                "state": "TRIAGE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-09T17:00:00.000Z",
                "assignee": {
                  "id": "m11",
                  "role": "MEMBER",
                  "user": {
                    "id": "u11",
                    "name": "Anita Borg",
                    "avatarUrl": "https://avatars.example.com/u11.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "BACKLOG",
          "count": 15,
          "issues": {
            "items": [
              {
                "id": "i094",
                "key": "ING-94",
                "title": "Retry keep-alives behind a proxy",
                "state": "BACKLOG",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T17:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i092",
                "key": "ING-92",
                "title": "Refactor the WebSocket transport after a redeploy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-12T09:00:00.000Z",
                "assignee": {
                  "id": "m06",
                  "role": "MEMBER",
                  "user": {
                    "id": "u06",
                    "name": "Edsger Dijkstra",
                    "avatarUrl": "https://avatars.example.com/u06.png"
                  }
                },
                "labels": [
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i089",
                "key": "ING-89",
                "title": "Document cold starts for large pages",
                "state": "BACKLOG",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-12T08:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i083",
                "key": "ING-83",
                "title": "Document the retry budget under load",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-11T03:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i079",
                "key": "ING-79",
                "title": "Remove cursor pagination behind a proxy",
                "state": "BACKLOG",
                "priority": "NONE",
                "updatedAt": "2025-12-12T03:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i071",
                "key": "ING-71",
                "title": "Remove the idempotency store behind a proxy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T08:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": []
              },
              {
                "id": "i069",
                "key": "ING-69",
                "title": "Retry the batch planner after a redeploy",
                "state": "BACKLOG",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T13:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i055",
                "key": "ING-55",
                "title": "Harden the retry budget for offline clients",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-10T08:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i041",
                "key": "ING-41",
                "title": "Investigate the shape registry under load",
                "state": "BACKLOG",
                "priority": "LOW",
                "updatedAt": "2025-12-10T10:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i040",
                "key": "ING-40",
                "title": "Document schema reload in the Kotlin runtime",
                "state": "BACKLOG",
                "priority": "URGENT",
                "updatedAt": "2025-12-09T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "TODO",
          "count": 8,
          "issues": {
            "items": [
              {
                "id": "i077",
                "key": "ING-77",
                "title": "Remove the batch planner for large pages",
                "state": "TODO",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T09:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i066",
                "key": "ING-66",
                "title": "Retry the idempotency store under load",
                "state": "TODO",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T22:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  }
                ]
              },
              {
                "id": "i049",
                "key": "ING-49",
                "title": "Refactor policy pushdown on reconnect",
                "state": "TODO",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T07:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i038",
                "key": "ING-38",
                "title": "Document schema reload on slow networks",
                "state": "TODO",
                "priority": "LOW",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m06",
                  "role": "MEMBER",
                  "user": {
                    "id": "u06",
                    "name": "Edsger Dijkstra",
                    "avatarUrl": "https://avatars.example.com/u06.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i037",
                "key": "ING-37",
                "title": "Remove policy pushdown for large pages",
                "state": "TODO",
                "priority": "LOW",
                "updatedAt": "2025-12-09T15:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i036",
                "key": "ING-36",
                "title": "Fix policy pushdown behind a proxy",
                "state": "TODO",
                "priority": "NONE",
                "updatedAt": "2025-12-10T05:00:00.000Z",
                "assignee": {
                  "id": "m09",
                  "role": "MEMBER",
                  "user": {
                    "id": "u09",
                    "name": "Margaret Hamilton",
                    "avatarUrl": "https://avatars.example.com/u09.png"
                  }
                },
                "labels": []
              },
              {
                "id": "i028",
                "key": "ING-28",
                "title": "Retry the shape registry in the Kotlin runtime",
                "state": "TODO",
                "priority": "URGENT",
                "updatedAt": "2025-12-08T16:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i025",
                "key": "ING-25",
                "title": "Fix policy pushdown under load",
                "state": "TODO",
                "priority": "NONE",
                "updatedAt": "2025-12-09T15:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "IN_PROGRESS",
          "count": 18,
          "issues": {
            "items": [
              {
                "id": "i078",
                "key": "ING-78",
                "title": "Refactor the WebSocket transport on reconnect",
                "state": "IN_PROGRESS",
                "priority": "NONE",
                "updatedAt": "2026-02-01T12:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i100",
                "key": "ING-100",
                "title": "Document the batch planner under load",
                "state": "IN_PROGRESS",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-12T14:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i090",
                "key": "ING-90",
                "title": "Investigate keep-alives on reconnect",
                "state": "IN_PROGRESS",
                "priority": "URGENT",
                "updatedAt": "2025-12-12T00:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i067",
                "key": "ING-67",
                "title": "Harden the batch planner behind a proxy",
                "state": "IN_PROGRESS",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T09:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i065",
                "key": "ING-65",
                "title": "Measure the batch planner on reconnect",
                "state": "IN_PROGRESS",
                "priority": "NONE",
                "updatedAt": "2025-12-10T22:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i064",
                "key": "ING-64",
                "title": "Remove keep-alives in the Kotlin runtime",
                "state": "IN_PROGRESS",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T14:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i061",
                "key": "ING-61",
                "title": "Retry keep-alives on reconnect",
                "state": "IN_PROGRESS",
                "priority": "HIGH",
                "updatedAt": "2025-12-09T22:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i058",
                "key": "ING-58",
                "title": "Refactor the batch planner for large pages",
                "state": "IN_PROGRESS",
                "priority": "LOW",
                "updatedAt": "2025-12-10T06:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i050",
                "key": "ING-50",
                "title": "Refactor policy pushdown for large pages",
                "state": "IN_PROGRESS",
                "priority": "HIGH",
                "updatedAt": "2025-12-09T10:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i030",
                "key": "ING-30",
                "title": "Fix cursor pagination for large pages",
                "state": "IN_PROGRESS",
                "priority": "LOW",
                "updatedAt": "2025-12-09T12:00:00.000Z",
                "assignee": {
                  "id": "m02",
                  "role": "ADMIN",
                  "user": {
                    "id": "u02",
                    "name": "Grace Hopper",
                    "avatarUrl": "https://avatars.example.com/u02.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "IN_REVIEW",
          "count": 9,
          "issues": {
            "items": [
              {
                "id": "i091",
                "key": "ING-91",
                "title": "Refactor the retry budget after a redeploy",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-12T04:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i087",
                "key": "ING-87",
                "title": "Measure the WebSocket transport for offline clients",
                "state": "IN_REVIEW",
                "priority": "NONE",
                "updatedAt": "2025-12-11T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i082",
                "key": "ING-82",
                "title": "Retry the WebSocket transport in the Kotlin runtime",
                "state": "IN_REVIEW",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T19:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i072",
                "key": "ING-72",
                "title": "Investigate policy pushdown for offline clients",
                "state": "IN_REVIEW",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-10T20:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i063",
                "key": "ING-63",
                "title": "Retry the batch planner for large pages",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-10T07:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i060",
                "key": "ING-60",
                "title": "Measure cold starts under load",
                "state": "IN_REVIEW",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T01:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              },
              {
                "id": "i054",
                "key": "ING-54",
                "title": "Measure the idempotency store in the Kotlin runtime",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-10T23:00:00.000Z",
                "assignee": {
                  "id": "m08",
                  "role": "MEMBER",
                  "user": {
                    "id": "u08",
                    "name": "Tim Berners-Lee",
                    "avatarUrl": "https://avatars.example.com/u08.png"
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l07",
                    "name": "ux",
                    "color": "#d4c5f9"
                  }
                ]
              },
              {
                "id": "i016",
                "key": "ING-16",
                "title": "Measure the shape registry on slow networks",
                "state": "IN_REVIEW",
                "priority": "LOW",
                "updatedAt": "2025-12-08T07:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  }
                ]
              },
              {
                "id": "i010",
                "key": "ING-10",
                "title": "Refactor cursor pagination on reconnect",
                "state": "IN_REVIEW",
                "priority": "URGENT",
                "updatedAt": "2025-12-07T16:00:00.000Z",
                "assignee": {
                  "id": "m05",
                  "role": "MEMBER",
                  "user": {
                    "id": "u05",
                    "name": "Barbara Liskov",
                    "avatarUrl": "https://avatars.example.com/u05.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  }
                ]
              }
            ]
          }
        },
        {
          "state": "DONE",
          "count": 15,
          "issues": {
            "items": [
              {
                "id": "i098",
                "key": "ING-98",
                "title": "Investigate policy pushdown behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T22:00:00.000Z",
                "assignee": null,
                "labels": []
              },
              {
                "id": "i097",
                "key": "ING-97",
                "title": "Refactor the idempotency store on slow networks",
                "state": "DONE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T07:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i096",
                "key": "ING-96",
                "title": "Add cursor pagination behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-12T02:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  },
                  {
                    "id": "l08",
                    "name": "infra",
                    "color": "#5319e7"
                  },
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i095",
                "key": "ING-95",
                "title": "Document the retry budget for large pages",
                "state": "DONE",
                "priority": "MEDIUM",
                "updatedAt": "2025-12-11T06:00:00.000Z",
                "assignee": null,
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l06",
                    "name": "security",
                    "color": "#b60205"
                  }
                ]
              },
              {
                "id": "i088",
                "key": "ING-88",
                "title": "Remove schema reload for large pages",
                "state": "DONE",
                "priority": "URGENT",
                "updatedAt": "2025-12-11T12:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l01",
                    "name": "bug",
                    "color": "#d73a4a"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  },
                  {
                    "id": "l10",
                    "name": "regression",
                    "color": "#e99695"
                  }
                ]
              },
              {
                "id": "i081",
                "key": "ING-81",
                "title": "Add the idempotency store for offline clients",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-11T14:00:00.000Z",
                "assignee": {
                  "id": "m01",
                  "role": "OWNER",
                  "user": {
                    "id": "u01",
                    "name": "Ada Lovelace",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i073",
                "key": "ING-73",
                "title": "Document policy pushdown for offline clients",
                "state": "DONE",
                "priority": "LOW",
                "updatedAt": "2025-12-11T14:00:00.000Z",
                "assignee": {
                  "id": "m10",
                  "role": "MEMBER",
                  "user": {
                    "id": "u10",
                    "name": "Vint Cerf",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l09",
                    "name": "flaky",
                    "color": "#fbca04"
                  }
                ]
              },
              {
                "id": "i068",
                "key": "ING-68",
                "title": "Measure keep-alives behind a proxy",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T16:00:00.000Z",
                "assignee": {
                  "id": "m03",
                  "role": "MEMBER",
                  "user": {
                    "id": "u03",
                    "name": "Alan Turing",
                    "avatarUrl": "https://avatars.example.com/u03.png"
                  }
                },
                "labels": [
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              },
              {
                "id": "i051",
                "key": "ING-51",
                "title": "Retry the shape registry for offline clients",
                "state": "DONE",
                "priority": "HIGH",
                "updatedAt": "2025-12-10T23:00:00.000Z",
                "assignee": {
                  "id": "m12",
                  "role": "GUEST",
                  "user": {
                    "id": "u12",
                    "name": "Leslie Lamport",
                    "avatarUrl": "https://avatars.example.com/u12.png"
                  }
                },
                "labels": [
                  {
                    "id": "l02",
                    "name": "feature",
                    "color": "#0e8a16"
                  },
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l05",
                    "name": "performance",
                    "color": "#a2eeef"
                  }
                ]
              },
              {
                "id": "i048",
                "key": "ING-48",
                "title": "Cache schema reload for large pages",
                "state": "DONE",
                "priority": "URGENT",
                "updatedAt": "2025-12-10T20:00:00.000Z",
                "assignee": {
                  "id": "m07",
                  "role": "MEMBER",
                  "user": {
                    "id": "u07",
                    "name": "Radia Perlman",
                    "avatarUrl": null
                  }
                },
                "labels": [
                  {
                    "id": "l03",
                    "name": "chore",
                    "color": "#cfd3d7"
                  },
                  {
                    "id": "l04",
                    "name": "docs",
                    "color": "#0075ca"
                  }
                ]
              }
            ]
          }
        }
      ]
    }
  }
}

Rayfold 2 requests

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "board",
      "args": {
        "projectId": "p1"
      },
      "shape": "{ project { key name } columns { state count issues(page: { first: 10 }) { items { ...Issue.row } } } }",
      "live": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"project":{"$type":"Project","key":"ING","name":"Ingest pipeline"},"columns":[{"state":"TRIAGE","count":20,"issues":{"items":[{"$type":"Issue","id":"i093","key":"ING-93","title":"Retry the retry budget in the Kotlin runtime","state":"TRIAGE","priority":"LOW","updatedAt":"2025-12-11T18:00:00.000Z","assignee":{"$type":"Member","id":"m04","role":"MEMBER","user":{"$type":"User","id":"u04","name":"Katherine Johnson","avatarUrl":null}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"}]},{"$type":"Issue","id":"i086","key":"ING-86","title":"Remove schema reload after a redeploy","state":"TRIAGE","priority":"URGENT","updatedAt":"2025-12-12T02:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i085","key":"ING-85","title":"Remove schema reload for offline clients","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-11T01:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i076","key":"ING-76","title":"Fix cold starts on reconnect","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-11T07:00:00.000Z","assignee":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i075","key":"ING-75","title":"Document the retry budget on reconnect","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-11T13:00:00.000Z","assignee":{"$type":"Member","id":"m10","role":"MEMBER","user":{"$type":"User","id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i070","key":"ING-70","title":"Document schema reload for large pages","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-10T06:00:00.000Z","assignee":{"$type":"Member","id":"m04","role":"MEMBER","user":{"$type":"User","id":"u04","name":"Katherine Johnson","avatarUrl":null}},"labels":[{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"}]},{"$type":"Issue","id":"i052","key":"ING-52","title":"Document cold starts for offline clients","state":"TRIAGE","priority":"NONE","updatedAt":"2025-12-10T16:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i047","key":"ING-47","title":"Fix keep-alives after a redeploy","state":"TRIAGE","priority":"MEDIUM","updatedAt":"2025-12-10T15:00:00.000Z","assignee":{"$type":"Member","id":"m11","role":"MEMBER","user":{"$type":"User","id":"u11","name":"Anita Borg","avatarUrl":"https://avatars.example.com/u11.png"}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i046","key":"ING-46","title":"Retry keep-alives for large pages","state":"TRIAGE","priority":"MEDIUM","updatedAt":"2025-12-09T13:00:00.000Z","assignee":{"$type":"Member","id":"m09","role":"MEMBER","user":{"$type":"User","id":"u09","name":"Margaret Hamilton","avatarUrl":"https://avatars.example.com/u09.png"}},"labels":[{"$type":"Label","id":"l06","name":"security","color":"#b60205"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i043","key":"ING-43","title":"Fix the WebSocket transport for large pages","state":"TRIAGE","priority":"MEDIUM","updatedAt":"2025-12-09T17:00:00.000Z","assignee":{"$type":"Member","id":"m11","role":"MEMBER","user":{"$type":"User","id":"u11","name":"Anita Borg","avatarUrl":"https://avatars.example.com/u11.png"}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]}]}},{"state":"BACKLOG","count":15,"issues":{"items":[{"$type":"Issue","id":"i094","key":"ING-94","title":"Retry keep-alives behind a proxy","state":"BACKLOG","priority":"MEDIUM","updatedAt":"2025-12-11T17:00:00.000Z","assignee":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i092","key":"ING-92","title":"Refactor the WebSocket transport after a redeploy","state":"BACKLOG","priority":"HIGH","updatedAt":"2025-12-12T09:00:00.000Z","assignee":{"$type":"Member","id":"m06","role":"MEMBER","user":{"$type":"User","id":"u06","name":"Edsger Dijkstra","avatarUrl":"https://avatars.example.com/u06.png"}},"labels":[{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"}]},{"$type":"Issue","id":"i089","key":"ING-89","title":"Document cold starts for large pages","state":"BACKLOG","priority":"MEDIUM","updatedAt":"2025-12-12T08:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i083","key":"ING-83","title":"Document the retry budget under load","state":"BACKLOG","priority":"LOW","updatedAt":"2025-12-11T03:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"}]},{"$type":"Issue","id":"i079","key":"ING-79","title":"Remove cursor pagination behind a proxy","state":"BACKLOG","priority":"NONE","updatedAt":"2025-12-12T03:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i071","key":"ING-71","title":"Remove the idempotency store behind a proxy","state":"BACKLOG","priority":"HIGH","updatedAt":"2025-12-10T08:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[]},{"$type":"Issue","id":"i069","key":"ING-69","title":"Retry the batch planner after a redeploy","state":"BACKLOG","priority":"HIGH","updatedAt":"2025-12-11T13:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i055","key":"ING-55","title":"Harden the retry budget for offline clients","state":"BACKLOG","priority":"LOW","updatedAt":"2025-12-10T08:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i041","key":"ING-41","title":"Investigate the shape registry under load","state":"BACKLOG","priority":"LOW","updatedAt":"2025-12-10T10:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i040","key":"ING-40","title":"Document schema reload in the Kotlin runtime","state":"BACKLOG","priority":"URGENT","updatedAt":"2025-12-09T16:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l06","name":"security","color":"#b60205"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]}]}},{"state":"TODO","count":9,"issues":{"items":[{"$type":"Issue","id":"i078","key":"ING-78","title":"Refactor the WebSocket transport on reconnect","state":"TODO","priority":"NONE","updatedAt":"2025-12-10T11:00:00.000Z","assignee":{"$type":"Member","id":"m02","role":"ADMIN","user":{"$type":"User","id":"u02","name":"Grace Hopper","avatarUrl":"https://avatars.example.com/u02.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i077","key":"ING-77","title":"Remove the batch planner for large pages","state":"TODO","priority":"MEDIUM","updatedAt":"2025-12-11T09:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i066","key":"ING-66","title":"Retry the idempotency store under load","state":"TODO","priority":"HIGH","updatedAt":"2025-12-10T22:00:00.000Z","assignee":{"$type":"Member","id":"m09","role":"MEMBER","user":{"$type":"User","id":"u09","name":"Margaret Hamilton","avatarUrl":"https://avatars.example.com/u09.png"}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"}]},{"$type":"Issue","id":"i049","key":"ING-49","title":"Refactor policy pushdown on reconnect","state":"TODO","priority":"MEDIUM","updatedAt":"2025-12-10T07:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"}]},{"$type":"Issue","id":"i038","key":"ING-38","title":"Document schema reload on slow networks","state":"TODO","priority":"LOW","updatedAt":"2025-12-10T06:00:00.000Z","assignee":{"$type":"Member","id":"m06","role":"MEMBER","user":{"$type":"User","id":"u06","name":"Edsger Dijkstra","avatarUrl":"https://avatars.example.com/u06.png"}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i037","key":"ING-37","title":"Remove policy pushdown for large pages","state":"TODO","priority":"LOW","updatedAt":"2025-12-09T15:00:00.000Z","assignee":{"$type":"Member","id":"m10","role":"MEMBER","user":{"$type":"User","id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i036","key":"ING-36","title":"Fix policy pushdown behind a proxy","state":"TODO","priority":"NONE","updatedAt":"2025-12-10T05:00:00.000Z","assignee":{"$type":"Member","id":"m09","role":"MEMBER","user":{"$type":"User","id":"u09","name":"Margaret Hamilton","avatarUrl":"https://avatars.example.com/u09.png"}},"labels":[]},{"$type":"Issue","id":"i028","key":"ING-28","title":"Retry the shape registry in the Kotlin runtime","state":"TODO","priority":"URGENT","updatedAt":"2025-12-08T16:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"}]},{"$type":"Issue","id":"i025","key":"ING-25","title":"Fix policy pushdown under load","state":"TODO","priority":"NONE","updatedAt":"2025-12-09T15:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]}]}},{"state":"IN_PROGRESS","count":17,"issues":{"items":[{"$type":"Issue","id":"i100","key":"ING-100","title":"Document the batch planner under load","state":"IN_PROGRESS","priority":"MEDIUM","updatedAt":"2025-12-12T14:00:00.000Z","assignee":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i090","key":"ING-90","title":"Investigate keep-alives on reconnect","state":"IN_PROGRESS","priority":"URGENT","updatedAt":"2025-12-12T00:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i067","key":"ING-67","title":"Harden the batch planner behind a proxy","state":"IN_PROGRESS","priority":"MEDIUM","updatedAt":"2025-12-10T09:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i065","key":"ING-65","title":"Measure the batch planner on reconnect","state":"IN_PROGRESS","priority":"NONE","updatedAt":"2025-12-10T22:00:00.000Z","assignee":{"$type":"Member","id":"m01","role":"OWNER","user":{"$type":"User","id":"u01","name":"Ada Lovelace","avatarUrl":null}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"}]},{"$type":"Issue","id":"i064","key":"ING-64","title":"Remove keep-alives in the Kotlin runtime","state":"IN_PROGRESS","priority":"URGENT","updatedAt":"2025-12-10T14:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i061","key":"ING-61","title":"Retry keep-alives on reconnect","state":"IN_PROGRESS","priority":"HIGH","updatedAt":"2025-12-09T22:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i058","key":"ING-58","title":"Refactor the batch planner for large pages","state":"IN_PROGRESS","priority":"LOW","updatedAt":"2025-12-10T06:00:00.000Z","assignee":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i050","key":"ING-50","title":"Refactor policy pushdown for large pages","state":"IN_PROGRESS","priority":"HIGH","updatedAt":"2025-12-09T10:00:00.000Z","assignee":{"$type":"Member","id":"m02","role":"ADMIN","user":{"$type":"User","id":"u02","name":"Grace Hopper","avatarUrl":"https://avatars.example.com/u02.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i030","key":"ING-30","title":"Fix cursor pagination for large pages","state":"IN_PROGRESS","priority":"LOW","updatedAt":"2025-12-09T12:00:00.000Z","assignee":{"$type":"Member","id":"m02","role":"ADMIN","user":{"$type":"User","id":"u02","name":"Grace Hopper","avatarUrl":"https://avatars.example.com/u02.png"}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i026","key":"ING-26","title":"Retry keep-alives on reconnect","state":"IN_PROGRESS","priority":"NONE","updatedAt":"2025-12-09T00:00:00.000Z","assignee":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]}]}},{"state":"IN_REVIEW","count":9,"issues":{"items":[{"$type":"Issue","id":"i091","key":"ING-91","title":"Refactor the retry budget after a redeploy","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-12T04:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i087","key":"ING-87","title":"Measure the WebSocket transport for offline clients","state":"IN_REVIEW","priority":"NONE","updatedAt":"2025-12-11T02:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i082","key":"ING-82","title":"Retry the WebSocket transport in the Kotlin runtime","state":"IN_REVIEW","priority":"HIGH","updatedAt":"2025-12-10T19:00:00.000Z","assignee":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i072","key":"ING-72","title":"Investigate policy pushdown for offline clients","state":"IN_REVIEW","priority":"MEDIUM","updatedAt":"2025-12-10T20:00:00.000Z","assignee":{"$type":"Member","id":"m10","role":"MEMBER","user":{"$type":"User","id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i063","key":"ING-63","title":"Retry the batch planner for large pages","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-10T07:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i060","key":"ING-60","title":"Measure cold starts under load","state":"IN_REVIEW","priority":"URGENT","updatedAt":"2025-12-10T01:00:00.000Z","assignee":{"$type":"Member","id":"m01","role":"OWNER","user":{"$type":"User","id":"u01","name":"Ada Lovelace","avatarUrl":null}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]},{"$type":"Issue","id":"i054","key":"ING-54","title":"Measure the idempotency store in the Kotlin runtime","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-10T23:00:00.000Z","assignee":{"$type":"Member","id":"m08","role":"MEMBER","user":{"$type":"User","id":"u08","name":"Tim Berners-Lee","avatarUrl":"https://avatars.example.com/u08.png"}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l07","name":"ux","color":"#d4c5f9"}]},{"$type":"Issue","id":"i016","key":"ING-16","title":"Measure the shape registry on slow networks","state":"IN_REVIEW","priority":"LOW","updatedAt":"2025-12-08T07:00:00.000Z","assignee":{"$type":"Member","id":"m10","role":"MEMBER","user":{"$type":"User","id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"}]},{"$type":"Issue","id":"i010","key":"ING-10","title":"Refactor cursor pagination on reconnect","state":"IN_REVIEW","priority":"URGENT","updatedAt":"2025-12-07T16:00:00.000Z","assignee":{"$type":"Member","id":"m05","role":"MEMBER","user":{"$type":"User","id":"u05","name":"Barbara Liskov","avatarUrl":"https://avatars.example.com/u05.png"}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"}]}]}},{"state":"DONE","count":15,"issues":{"items":[{"$type":"Issue","id":"i098","key":"ING-98","title":"Investigate policy pushdown behind a proxy","state":"DONE","priority":"HIGH","updatedAt":"2025-12-11T22:00:00.000Z","assignee":null,"labels":[]},{"$type":"Issue","id":"i097","key":"ING-97","title":"Refactor the idempotency store on slow networks","state":"DONE","priority":"LOW","updatedAt":"2025-12-11T07:00:00.000Z","assignee":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i096","key":"ING-96","title":"Add cursor pagination behind a proxy","state":"DONE","priority":"HIGH","updatedAt":"2025-12-12T02:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"},{"$type":"Label","id":"l08","name":"infra","color":"#5319e7"},{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i095","key":"ING-95","title":"Document the retry budget for large pages","state":"DONE","priority":"MEDIUM","updatedAt":"2025-12-11T06:00:00.000Z","assignee":null,"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l06","name":"security","color":"#b60205"}]},{"$type":"Issue","id":"i088","key":"ING-88","title":"Remove schema reload for large pages","state":"DONE","priority":"URGENT","updatedAt":"2025-12-11T12:00:00.000Z","assignee":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"$type":"Label","id":"l01","name":"bug","color":"#d73a4a"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]},{"$type":"Issue","id":"i081","key":"ING-81","title":"Add the idempotency store for offline clients","state":"DONE","priority":"HIGH","updatedAt":"2025-12-11T14:00:00.000Z","assignee":{"$type":"Member","id":"m01","role":"OWNER","user":{"$type":"User","id":"u01","name":"Ada Lovelace","avatarUrl":null}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i073","key":"ING-73","title":"Document policy pushdown for offline clients","state":"DONE","priority":"LOW","updatedAt":"2025-12-11T14:00:00.000Z","assignee":{"$type":"Member","id":"m10","role":"MEMBER","user":{"$type":"User","id":"u10","name":"Vint Cerf","avatarUrl":null}},"labels":[{"$type":"Label","id":"l09","name":"flaky","color":"#fbca04"}]},{"$type":"Issue","id":"i068","key":"ING-68","title":"Measure keep-alives behind a proxy","state":"DONE","priority":"HIGH","updatedAt":"2025-12-10T16:00:00.000Z","assignee":{"$type":"Member","id":"m03","role":"MEMBER","user":{"$type":"User","id":"u03","name":"Alan Turing","avatarUrl":"https://avatars.example.com/u03.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]},{"$type":"Issue","id":"i051","key":"ING-51","title":"Retry the shape registry for offline clients","state":"DONE","priority":"HIGH","updatedAt":"2025-12-10T23:00:00.000Z","assignee":{"$type":"Member","id":"m12","role":"GUEST","user":{"$type":"User","id":"u12","name":"Leslie Lamport","avatarUrl":"https://avatars.example.com/u12.png"}},"labels":[{"$type":"Label","id":"l02","name":"feature","color":"#0e8a16"},{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l05","name":"performance","color":"#a2eeef"}]},{"$type":"Issue","id":"i048","key":"ING-48","title":"Cache schema reload for large pages","state":"DONE","priority":"URGENT","updatedAt":"2025-12-10T20:00:00.000Z","assignee":{"$type":"Member","id":"m07","role":"MEMBER","user":{"$type":"User","id":"u07","name":"Radia Perlman","avatarUrl":null}},"labels":[{"$type":"Label","id":"l03","name":"chore","color":"#cfd3d7"},{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"}]}]}}]},"meta":{"cost":49}}
{"id":1,"patch":[{"list":"columns.2.issues.items","del":[0]},{"at":"columns.2","value":{"count":8}},{"list":"columns.3.issues.items","del":[9],"ins":[{"at":0,"value":{"$type":"Issue","id":"i078","key":"ING-78","title":"Refactor the WebSocket transport on reconnect","state":"IN_PROGRESS","priority":"NONE","updatedAt":"2026-02-01T12:00:01.000Z","assignee":{"$type":"Member","id":"m02","role":"ADMIN","user":{"$type":"User","id":"u02","name":"Grace Hopper","avatarUrl":"https://avatars.example.com/u02.png"}},"labels":[{"$type":"Label","id":"l04","name":"docs","color":"#0075ca"},{"$type":"Label","id":"l10","name":"regression","color":"#e99695"}]}}]},{"at":"columns.3","value":{"count":18}}]}

(stream closed by the client)
POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "moveIssue",
      "args": {
        "id": "i078",
        "to": "IN_PROGRESS"
      },
      "key": "ws-live-00000001",
      "shape": "{ version }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "$type": "Issue",
    "version": 2
  },
  "patch": [
    {
      "set": "Issue:i078",
      "value": {
        "state": "IN_PROGRESS",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
... 10 more lines
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Issue",
    "version": 2
  },
  "patch": [
    {
      "set": "Issue:i078",
      "value": {
        "state": "IN_PROGRESS",
        "version": 2,
        "updatedAt": "2026-02-01T12:00:01.000Z"
      }
    },
    {
      "invOp": [
        "board"
      ]
    }
  ],
  "meta": {
    "cost": 1
  },
  "fin": true
}

One tenant rule, every way in

Rayfold ahead

Measured: surfaces one rule covers (ways in that enforce the same declared rule with no extra code, higher is better)

RESTREST: 1 ways in that enforce the same declared rule with no extra code1GraphQLGraphQL: 1 ways in that enforce the same declared rule with no extra code1RayfoldRayfold: 4 ways in that enforce the same declared rule with no extra code4
REST
1: the handler it was written in. A second endpoint over the same rows needs the check written again, and nothing fails if it is forgotten
GraphQL
1: the resolver it was written in. The schema cannot carry the rule, so every new resolver repeats it
Rayfold
4: the batch endpoint, the `GET /issues/{id}` route bound with `@http`, the MCP resource an assistant reads, and the live query all refuse the same row from one `@allow` on the entity

Authorization written by hand for the rules asserted here: 22 lines in the REST stack and 27 in the GraphQL stack, against 15 declarations in the Rayfold schema. All three refuse this cross-tenant read; the difference is how many places have to stay correct as the API grows.

See the real requests and responses (11)

REST 1 request

GET /issues/i610
authorization: Bearer u01
403 Forbidden
content-type: application/problem+json

{
  "type": "https://example.com/errors/forbidden",
  "title": "forbidden",
  "status": 403
}

GraphQL 2 requests

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ issue(id: \"i610\") { key title } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "issue": null
  }
}
POST /graphql
authorization: Bearer u05
content-type: application/json

{
  "query": "{ member(id: \"m01\") { user { name email } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "member": {
      "user": {
        "name": "Ada Lovelace",
        "email": null
      }
    }
  }
}

Rayfold 8 requests

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "issue",
      "args": {
        "id": "i610"
      },
      "shape": "{ key title }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": null,
  "meta": {
    "cost": 1
  },
  "fin": true
}
POST /rayfold
authorization: Bearer u13
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "issue",
      "args": {
        "id": "i610"
      },
      "shape": "{ key title }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "$type": "Issue",
    "key": "GXC-10",
    "title": "Refactor the shape registry"
  },
  "meta": {
    "cost": 1
  },
  "fin": true
}
6 more requests
POST /rayfold
authorization: Bearer u05
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "member",
      "args": {
        "id": "m01"
      },
      "shape": "{ user { name } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "$type": "Member",
    "user": {
      "$type": "User",
      "name": "Ada Lovelace"
    }
  },
  "meta": {
    "cost": 2
  },
  "fin": true
}
POST /rayfold
authorization: Bearer u05
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "member",
      "args": {
        "id": "m01"
      },
      "shape": "{ user { name email } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "error": {
    "code": "permission_denied",
    "message": "Not allowed to access User.email",
    "path": "user.email"
  },
  "fin": true
}
GET /issues/i610
authorization: Bearer u01
200 OK
cache-control: private, max-age=0, no-cache
content-type: application/json; charset=utf-8
etag: "sha256-502aa2b1cd1b18faec145262dee59444fa2c0799acdccddb24c2418f7a9b279d"

null
GET /issues/i002
authorization: Bearer u01
200 OK
cache-control: private, max-age=0, no-cache
content-type: application/json; charset=utf-8
etag: "sha256-5bebf7754f164f1f4ab77ca85ce4cc827f921fad738a8adc26da3303dd1e31fe"

{
  "$type": "Issue",
  "id": "i002",
  "key": "ING-2",
  "title": "Document the batch planner on reconnect",
  "state": "IN_PROGRESS",
  "priority": "URGENT",
  "updatedAt": "2025-12-08T08:00:00.000Z"
}
POST /mcp
authorization: Bearer u01
content-type: application/json

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "resources/read",
  "params": {
    "uri": "rayfold://query/issue?id=i610"
  }
}
200 OK
content-type: application/json

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "contents": [
      {
        "uri": "rayfold://query/issue?id=i610",
        "mimeType": "application/json",
        "text": "null"
      }
    ]
  }
}
POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "issue",
      "args": {
        "id": "i610"
      },
      "shape": "{ key state }",
      "live": true
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":null,"meta":{"cost":1}}

(stream closed by the client)

An expensive request from a client

Level

Measured: what stops a costly request (refused before the data source is touched (1 = yes), higher is better)

RESTREST: yes refused before the data source is touched (1 = yes)yesGraphQLGraphQL: no refused before the data source is touched (1 = yes)noRayfoldRayfold: yes refused before the data source is touched (1 = yes)yes
REST
1: the endpoint decides its own shape, so the client cannot ask for a deeper join (the same reason it cannot ask for less)
GraphQL
0: the query ran and returned 37,492 bytes; cost analysis is a separate library to add and tune
Rayfold
1: the cost of 81,006 was computed from the schema against a budget of 1,000 and refused, with no loader called

Rayfold charges rows and loads, not columns: a page costs its size, and scalar fields are free.

See the real requests and responses (3)

REST 0 requests

No HTTP request on this stack for this step.

GraphQL 1 request

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ issues(first: 200) { items { key comments(first: 100) { items { body author { user { name } } } } children(first: 100) { items { key } } } } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "issues": {
      "items": [
        {
          "key": "SEC-100",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
... 3745 more lines
Full response body
{
  "data": {
    "issues": {
      "items": [
        {
          "key": "SEC-100",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-99",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-98",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-97",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-96",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-95",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-94",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "SEC-100"
              }
            ]
          }
        },
        {
          "key": "SEC-93",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-92",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-91",
          "comments": {
            "items": []
          },
          "children": {
            "items": [
              {
                "key": "SEC-97"
              }
            ]
          }
        },
        {
          "key": "SEC-90",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-89",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-88",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-87",
          "comments": {
            "items": []
          },
          "children": {
            "items": [
              {
                "key": "SEC-88"
              }
            ]
          }
        },
        {
          "key": "SEC-86",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-85",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-84",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-83",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-82",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-81",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-80",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-79",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-78",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-77",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-76",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-75",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-74",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "SEC-80"
              },
              {
                "key": "SEC-81"
              }
            ]
          }
        },
        {
          "key": "SEC-73",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-72",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-71",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-70",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-69",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-68",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-67",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-66",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-65",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-64",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-63",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-62",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-61",
          "comments": {
            "items": []
          },
          "children": {
            "items": [
              {
                "key": "SEC-65"
              }
            ]
          }
        },
        {
          "key": "SEC-60",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-59",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-58",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-57",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-56",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-55",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-54",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "SEC-55"
              }
            ]
          }
        },
        {
          "key": "SEC-53",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-52",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-51",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-50",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-49",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-48",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-47",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-46",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-45",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-44",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-43",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-42",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-41",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-40",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "SEC-48"
              }
            ]
          }
        },
        {
          "key": "SEC-39",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-38",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-37",
          "comments": {
            "items": []
          },
          "children": {
            "items": [
              {
                "key": "SEC-39"
              }
            ]
          }
        },
        {
          "key": "SEC-36",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "SEC-41"
              }
            ]
          }
        },
        {
          "key": "SEC-35",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-34",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-33",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-32",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-31",
          "comments": {
            "items": []
          },
          "children": {
            "items": [
              {
                "key": "SEC-35"
              }
            ]
          }
        },
        {
          "key": "SEC-30",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-29",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-28",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-27",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-26",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-25",
          "comments": {
            "items": []
          },
          "children": {
            "items": [
              {
                "key": "SEC-33"
              }
            ]
          }
        },
        {
          "key": "SEC-24",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-23",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-22",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-21",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-20",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-19",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-18",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-17",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-16",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-15",
          "comments": {
            "items": []
          },
          "children": {
            "items": [
              {
                "key": "SEC-19"
              }
            ]
          }
        },
        {
          "key": "SEC-14",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "SEC-22"
              }
            ]
          }
        },
        {
          "key": "SEC-13",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-12",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "SEC-13"
              }
            ]
          }
        },
        {
          "key": "SEC-11",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-10",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-9",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-8",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-7",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-6",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-5",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-4",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-3",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-2",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "SEC-1",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-100",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-99",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-98",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-97",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-96",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-95",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-94",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-93",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-92",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-91",
          "comments": {
            "items": []
          },
          "children": {
            "items": [
              {
                "key": "MIG-99"
              }
            ]
          }
        },
        {
          "key": "MIG-90",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "MIG-97"
              }
            ]
          }
        },
        {
          "key": "MIG-89",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-88",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "MIG-95"
              }
            ]
          }
        },
        {
          "key": "MIG-87",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-86",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-85",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-84",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-83",
          "comments": {
            "items": []
          },
          "children": {
            "items": [
              {
                "key": "MIG-84"
              }
            ]
          }
        },
        {
          "key": "MIG-82",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-81",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-80",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-79",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-78",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-77",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-76",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-75",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-74",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-73",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-72",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-71",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-70",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-69",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-68",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-67",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-66",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-65",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-64",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "MIG-74"
              }
            ]
          }
        },
        {
          "key": "MIG-63",
          "comments": {
            "items": []
          },
          "children": {
            "items": [
              {
                "key": "MIG-66"
              }
            ]
          }
        },
        {
          "key": "MIG-62",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-61",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-60",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-59",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-58",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-57",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-56",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "MIG-65"
              }
            ]
          }
        },
        {
          "key": "MIG-55",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-54",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Radia Perlman"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-53",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-52",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-51",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-50",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Barbara Liskov"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-49",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-48",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-47",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-46",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Edsger Dijkstra"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-45",
          "comments": {
            "items": []
          },
          "children": {
            "items": [
              {
                "key": "MIG-47"
              },
              {
                "key": "MIG-52"
              }
            ]
          }
        },
        {
          "key": "MIG-44",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-43",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-42",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Katherine Johnson"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-41",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-40",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Grace Hopper"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-39",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-38",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Vint Cerf"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-37",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-36",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Leslie Lamport"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Ada Lovelace"
                  }
                }
              }
            ]
          },
          "children": {
            "items": [
              {
                "key": "MIG-46"
              }
            ]
          }
        },
        {
          "key": "MIG-35",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-34",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Margaret Hamilton"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Alan Turing"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-33",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-32",
          "comments": {
            "items": [
              {
                "body": "Reproduced on the staging cluster.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              },
              {
                "body": "This is the same root cause as the retry storm last month.",
                "author": {
                  "user": {
                    "name": "Tim Berners-Lee"
                  }
                }
              },
              {
                "body": "Shipped behind a flag; watching the error rate.",
                "author": {
                  "user": {
                    "name": "Anita Borg"
                  }
                }
              }
            ]
          },
          "children": {
            "items": []
          }
        },
        {
          "key": "MIG-31",
          "comments": {
            "items": []
          },
          "children": {
            "items": []
          }
        }
      ]
    }
  }
}

Rayfold 2 requests

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "issues",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { key comments(page: { first: 100 }) { items { body author { user { name } } } } children(page: { first: 100 }) { items { key } } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "error": {
    "code": "resource_exhausted",
    "message": "Batch cost 81006 exceeds budget 1000",
    "data": {
      "cost": 81006,
      "budget": 1000
    }
  },
  "fin": true
}
POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "issues",
      "args": {
        "filter": {
          "projectId": "p1"
        },
        "page": {
          "first": 10
        }
      },
      "shape": "{ items { key comments(page: { first: 5 }) { items { body author { user { name } } } } children(page: { first: 5 }) { items { key } } } }"
    }
  ]
... 1 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Issue",
        "key": "ING-100",
        "comments": {
          "items": [
            {
              "$type": "Comment",
              "body": "Reproduced on the staging cluster.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
... 275 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "issues",
      "args": {
        "filter": {
          "projectId": "p1"
        },
        "page": {
          "first": 10
        }
      },
      "shape": "{ items { key comments(page: { first: 5 }) { items { body author { user { name } } } } children(page: { first: 5 }) { items { key } } } }"
    }
  ]
}
Full response body
{
  "id": 1,
  "data": {
    "items": [
      {
        "$type": "Issue",
        "key": "ING-100",
        "comments": {
          "items": [
            {
              "$type": "Comment",
              "body": "Reproduced on the staging cluster.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Anita Borg"
                }
              }
            },
            {
              "$type": "Comment",
              "body": "This is the same root cause as the retry storm last month.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Ada Lovelace"
                }
              }
            },
            {
              "$type": "Comment",
              "body": "Shipped behind a flag; watching the error rate.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Edsger Dijkstra"
                }
              }
            }
          ]
        },
        "children": {
          "items": []
        }
      },
      {
        "$type": "Issue",
        "key": "ING-99",
        "comments": {
          "items": []
        },
        "children": {
          "items": []
        }
      },
      {
        "$type": "Issue",
        "key": "ING-98",
        "comments": {
          "items": [
            {
              "$type": "Comment",
              "body": "Reproduced on the staging cluster.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Alan Turing"
                }
              }
            },
            {
              "$type": "Comment",
              "body": "This is the same root cause as the retry storm last month.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Leslie Lamport"
                }
              }
            },
            {
              "$type": "Comment",
              "body": "Shipped behind a flag; watching the error rate.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Grace Hopper"
                }
              }
            }
          ]
        },
        "children": {
          "items": [
            {
              "$type": "Issue",
              "key": "ING-100"
            }
          ]
        }
      },
      {
        "$type": "Issue",
        "key": "ING-97",
        "comments": {
          "items": []
        },
        "children": {
          "items": []
        }
      },
      {
        "$type": "Issue",
        "key": "ING-96",
        "comments": {
          "items": [
            {
              "$type": "Comment",
              "body": "Reproduced on the staging cluster.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Alan Turing"
                }
              }
            },
            {
              "$type": "Comment",
              "body": "This is the same root cause as the retry storm last month.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Leslie Lamport"
                }
              }
            },
            {
              "$type": "Comment",
              "body": "Shipped behind a flag; watching the error rate.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Katherine Johnson"
                }
              }
            }
          ]
        },
        "children": {
          "items": []
        }
      },
      {
        "$type": "Issue",
        "key": "ING-95",
        "comments": {
          "items": []
        },
        "children": {
          "items": []
        }
      },
      {
        "$type": "Issue",
        "key": "ING-94",
        "comments": {
          "items": [
            {
              "$type": "Comment",
              "body": "Reproduced on the staging cluster.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Grace Hopper"
                }
              }
            },
            {
              "$type": "Comment",
              "body": "This is the same root cause as the retry storm last month.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Alan Turing"
                }
              }
            },
            {
              "$type": "Comment",
              "body": "Shipped behind a flag; watching the error rate.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Margaret Hamilton"
                }
              }
            }
          ]
        },
        "children": {
          "items": []
        }
      },
      {
        "$type": "Issue",
        "key": "ING-93",
        "comments": {
          "items": []
        },
        "children": {
          "items": [
            {
              "$type": "Issue",
              "key": "ING-94"
            }
          ]
        }
      },
      {
        "$type": "Issue",
        "key": "ING-92",
        "comments": {
          "items": [
            {
              "$type": "Comment",
              "body": "Reproduced on the staging cluster.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Alan Turing"
                }
              }
            },
            {
              "$type": "Comment",
              "body": "This is the same root cause as the retry storm last month.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Tim Berners-Lee"
                }
              }
            },
            {
              "$type": "Comment",
              "body": "Shipped behind a flag; watching the error rate.",
              "author": {
                "$type": "Member",
                "user": {
                  "$type": "User",
                  "name": "Tim Berners-Lee"
                }
              }
            }
          ]
        },
        "children": {
          "items": []
        }
      },
      {
        "$type": "Issue",
        "key": "ING-91",
        "comments": {
          "items": []
        },
        "children": {
          "items": []
        }
      }
    ]
  },
  "meta": {
    "cost": 256
  },
  "fin": true
}

Second read of an unchanged screen

Level

Measured: conditional requests (answered 304 by a cache (1 = yes), higher is better)

RESTREST: yes answered 304 by a cache (1 = yes)yesGraphQLGraphQL: yes answered 304 by a cache (1 = yes)yesRayfoldRayfold: yes answered 304 by a cache (1 = yes)yes
REST
304, with the cache rule written into the handler
GraphQL
304, because this server was configured to allow GET for queries; most GraphQL deployments POST everything and cannot
Rayfold
304, with `private, max-age=60` taken from `@cache(maxAge: 60s, scope: public)` on the entity, and the shape in the URL so the key is stable
See the real requests and responses (7)

REST 3 requests

GET /projects/p1
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "63fcf7dac20fd80f"

{
  "id": "p1",
  "key": "ING",
  "name": "Ingest pipeline",
  "status": "ACTIVE",
  "startDate": "2026-01-05",
  "targetDate": "2026-03-15",
  "teamId": "t1",
  "leadId": "m01"
}
GET /projects/p1
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "63fcf7dac20fd80f"

{
  "id": "p1",
  "key": "ING",
  "name": "Ingest pipeline",
  "status": "ACTIVE",
  "startDate": "2026-01-05",
  "targetDate": "2026-03-15",
  "teamId": "t1",
  "leadId": "m01"
}
1 more request
GET /projects/p1
authorization: Bearer u01
if-none-match: "63fcf7dac20fd80f"
304 Not Modified
cache-control: private, max-age=30
etag: "63fcf7dac20fd80f"

GraphQL 2 requests

GET /graphql?query=%7B%20project(id%3A%20%22p1%22)%20%7B%20key%20name%20status%20targetDate%20%7D%20%7D
authorization: Bearer u01
200 OK
cache-control: private, max-age=60
content-type: application/graphql-response+json
etag: "cfa65d81a1ce10f2"

{
  "data": {
    "project": {
      "key": "ING",
      "name": "Ingest pipeline",
      "status": "ACTIVE",
      "targetDate": "2026-03-15"
    }
  }
}
GET /graphql?query=%7B%20project(id%3A%20%22p1%22)%20%7B%20key%20name%20status%20targetDate%20%7D%20%7D
authorization: Bearer u01
if-none-match: "cfa65d81a1ce10f2"
304 Not Modified
cache-control: private, max-age=60
etag: "cfa65d81a1ce10f2"

Rayfold 2 requests

GET /rayfold/project?a=eyJpZCI6InAxIn0&s=%7B%20key%20name%20status%20targetDate%20%7D
authorization: Bearer u01
200 OK
cache-control: private, max-age=60
content-type: application/rayfold-frames+json
etag: "sha256-fecc9b2240d49f5ee5f8eb7dc3869cfffa8828e2726b296260b90423c30d6ddf"

{
  "id": 1,
  "data": {
    "$type": "Project",
    "key": "ING",
    "name": "Ingest pipeline",
    "status": "ACTIVE",
    "targetDate": "2026-03-15"
  },
  "meta": {
    "cost": 1
  },
  "fin": true
}
GET /rayfold/project?a=eyJpZCI6InAxIn0&s=%7B%20key%20name%20status%20targetDate%20%7D
authorization: Bearer u01
if-none-match: "sha256-fecc9b2240d49f5ee5f8eb7dc3869cfffa8828e2726b296260b90423c30d6ddf"
304 Not Modified
cache-control: private, max-age=60
etag: "sha256-fecc9b2240d49f5ee5f8eb7dc3869cfffa8828e2726b296260b90423c30d6ddf"

One flaky field, the rest of the page fine

Rayfold ahead

Measured: where 'this field may fail' is written (declared in the contract (1 = yes), higher is better)

RESTREST: no declared in the contract (1 = yes)noGraphQLGraphQL: no declared in the contract (1 = yes)noRayfoldRayfold: yes declared in the contract (1 = yes)yes
REST
in the handler, plus a `warnings` array the client has to know about; nothing in the contract says the field is unreliable
GraphQL
in the resolver; the field is nullable like every other nullable field, so a client cannot tell a missing value from a broken integration
Rayfold
`@partial` on the field: the frame carries the rest of the data and an error entry with the field's path, and generated clients see it

All three kept the page. The difference is whether the client can know in advance which fields are allowed to be missing.

See the real requests and responses (5)

REST 1 request

GET /issues/i004
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "1"

{
  "id": "i004",
  "key": "ING-4",
  "title": "Cache cold starts after a redeploy",
  "description": "Investigate policy pushdown.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "BACKLOG",
  "priority": "HIGH",
  "estimate": 8,
  "createdAt": "2025-12-07T09:00:00.000Z",
  "updatedAt": "2025-12-07T13:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": null,
  "reporterId": "m09",
  "assigneeId": "m03",
  "labelIds": [
... 35 more lines
Full response body
{
  "id": "i004",
  "key": "ING-4",
  "title": "Cache cold starts after a redeploy",
  "description": "Investigate policy pushdown.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "BACKLOG",
  "priority": "HIGH",
  "estimate": 8,
  "createdAt": "2025-12-07T09:00:00.000Z",
  "updatedAt": "2025-12-07T13:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": null,
  "reporterId": "m09",
  "assigneeId": "m03",
  "labelIds": [
    "l02",
    "l06"
  ],
  "parentId": null,
  "attachments": [],
  "externalState": null,
  "assignee": {
    "id": "m03",
    "role": "MEMBER",
    "user": {
      "id": "u03",
      "name": "Alan Turing",
      "avatarUrl": "https://avatars.example.com/u03.png",
      "email": "alan.turing@acme.example"
    }
  },
  "labels": [
    {
      "id": "l02",
      "name": "feature",
      "color": "#0e8a16"
    },
    {
      "id": "l06",
      "name": "security",
      "color": "#b60205"
    }
  ],
  "warnings": [
    {
      "field": "externalState",
      "detail": "The customer tracker is not answering"
    }
  ]
}

GraphQL 1 request

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ issue(id: \"i004\") { key state externalState } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "errors": [
    {
      "message": "The customer tracker is not answering",
      "locations": [
        {
          "line": 1,
          "column": 33
        }
      ],
      "path": [
        "issue",
        "externalState"
      ],
      "extensions": {
        "code": "UNAVAILABLE"
... 11 more lines
Full response body
{
  "errors": [
    {
      "message": "The customer tracker is not answering",
      "locations": [
        {
          "line": 1,
          "column": 33
        }
      ],
      "path": [
        "issue",
        "externalState"
      ],
      "extensions": {
        "code": "UNAVAILABLE"
      }
    }
  ],
  "data": {
    "issue": {
      "key": "ING-4",
      "state": "BACKLOG",
      "externalState": null
    }
  }
}

Rayfold 3 requests

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "issue",
      "args": {
        "id": "i004"
      },
      "shape": "{ key state externalState }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "$type": "Issue",
    "key": "ING-4",
    "state": "BACKLOG",
    "externalState": null
  },
  "meta": {
    "cost": 1
  },
  "errors": [
    {
      "code": "unavailable",
      "message": "The customer's tracker is not answering",
      "path": "externalState"
... 4 more lines
Full response body
{
  "id": 1,
  "data": {
    "$type": "Issue",
    "key": "ING-4",
    "state": "BACKLOG",
    "externalState": null
  },
  "meta": {
    "cost": 1
  },
  "errors": [
    {
      "code": "unavailable",
      "message": "The customer's tracker is not answering",
      "path": "externalState"
    }
  ],
  "fin": true
}
POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "project",
      "args": {
        "id": "p1"
      },
      "shape": "{ key spend }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "$type": "Project",
    "key": "ING",
    "spend": null
  },
  "meta": {
    "cost": 1
  },
  "errors": [
    {
      "code": "unavailable",
      "message": "The billing service is not answering",
      "path": "spend"
    }
... 3 more lines
Full response body
{
  "id": 1,
  "data": {
    "$type": "Project",
    "key": "ING",
    "spend": null
  },
  "meta": {
    "cost": 1
  },
  "errors": [
    {
      "code": "unavailable",
      "message": "The billing service is not answering",
      "path": "spend"
    }
  ],
  "fin": true
}
1 more request
POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "issue",
      "args": {
        "id": "i002"
      },
      "shape": "{ key assignee { user { name } } }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "error": {
    "code": "unavailable",
    "message": "The directory service is not answering",
    "path": "assignee.user"
  },
  "fin": true
}

A slow or large field on a page

Rayfold ahead

Measured: delivery of a slow field (the rest of the page arrives first, in the same response (1 = yes), higher is better)

RESTREST: no the rest of the page arrives first, in the same response (1 = yes)noGraphQLGraphQL: no the rest of the page arrives first, in the same response (1 = yes)noRayfoldRayfold: yes the rest of the page arrives first, in the same response (1 = yes)yes
REST
the description is part of the issue resource, so it is sent every time, even to a list that never shows it
GraphQL
one body: the client waits for the slowest field it asked for (`@defer` is still not in graphql-js 16)
Rayfold
`@lazy` on the field: the frame with the page comes first, the description follows at its path in the same response
See the real requests and responses (3)

REST 1 request

GET /issues/i004
authorization: Bearer u01
200 OK
cache-control: private, max-age=30
content-type: application/json
etag: "1"

{
  "id": "i004",
  "key": "ING-4",
  "title": "Cache cold starts after a redeploy",
  "description": "Investigate policy pushdown.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "BACKLOG",
  "priority": "HIGH",
  "estimate": 8,
  "createdAt": "2025-12-07T09:00:00.000Z",
  "updatedAt": "2025-12-07T13:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": null,
  "reporterId": "m09",
  "assigneeId": "m03",
  "labelIds": [
... 29 more lines
Full response body
{
  "id": "i004",
  "key": "ING-4",
  "title": "Cache cold starts after a redeploy",
  "description": "Investigate policy pushdown.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms.",
  "state": "BACKLOG",
  "priority": "HIGH",
  "estimate": 8,
  "createdAt": "2025-12-07T09:00:00.000Z",
  "updatedAt": "2025-12-07T13:00:00.000Z",
  "version": 1,
  "projectId": "p1",
  "sprintId": null,
  "reporterId": "m09",
  "assigneeId": "m03",
  "labelIds": [
    "l02",
    "l06"
  ],
  "parentId": null,
  "attachments": [],
  "externalState": null,
  "assignee": {
    "id": "m03",
    "role": "MEMBER",
    "user": {
      "id": "u03",
      "name": "Alan Turing",
      "avatarUrl": "https://avatars.example.com/u03.png",
      "email": "alan.turing@acme.example"
    }
  },
  "labels": [
    {
      "id": "l02",
      "name": "feature",
      "color": "#0e8a16"
    },
    {
      "id": "l06",
      "name": "security",
      "color": "#b60205"
    }
  ]
}

GraphQL 1 request

POST /graphql
authorization: Bearer u01
content-type: application/json

{
  "query": "{ issue(id: \"i004\") { key state description } }"
}
200 OK
cache-control: no-store
content-type: application/graphql-response+json

{
  "data": {
    "issue": {
      "key": "ING-4",
      "state": "BACKLOG",
      "description": "Investigate policy pushdown.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms."
    }
  }
}

Rayfold 1 request

POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "issue",
      "args": {
        "id": "i004"
      },
      "shape": "{ key state description }"
    }
  ]
}
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{"id":1,"data":{"$type":"Issue","key":"ING-4","state":"BACKLOG"},"meta":{"cost":1}}
{"id":1,"at":"","data":{"description":"Investigate policy pushdown.\n\nSeen for large pages: the first request is served, the next one is not, and the client retries until the budget runs out. The fix is to keep the connection warm and to charge the retry to the caller's budget, not to the queue.\n\nAcceptance: a soak run of one hour with no error frames, and the p99 under 40 ms."}}
{"id":1,"fin":true}

Letting an AI assistant use the API

Rayfold ahead

Measured: work to expose typed tools with dry runs (extra components to build, lower is better)

RESTREST: 2 extra components to build2GraphQLGraphQL: 2 extra components to build2RayfoldRayfold: 0 extra components to build0
REST
an OpenAPI document to write and keep true, plus an adapter; no dry run
GraphQL
introspection plus custom glue to turn mutations into tools; no dry run
Rayfold
none: 28 tools listed at /mcp from the same schema, with typed input, typed errors, and `simulate` to try a command without writing
See the real requests and responses (3)

REST 0 requests

No HTTP request on this stack for this step.

GraphQL 0 requests

No HTTP request on this stack for this step.

Rayfold 3 requests

POST /mcp
authorization: Bearer u01
content-type: application/json

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list"
}
200 OK
content-type: application/json

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "board",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "projectId": {
              "type": "string"
            }
          },
          "additionalProperties": false,
... 22291 more lines
Full response body
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "board",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "projectId": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "projectId"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Board"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Board": {
              "type": "object",
              "properties": {
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "columns": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/BoardColumn"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "project",
                "columns"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "BoardColumn": {
              "type": "object",
              "properties": {
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "count": {
                  "type": "integer"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "state",
                "count",
                "issues"
              ],
              "description": "One column of the board: a state, how many issues are in it, and the first page of them."
            }
          }
        },
        "description": "One board screen: every column with its count and its first page of issues. Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "issue",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Issue"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "issues",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "filter": {
              "anyOf": [
                {
                  "$ref": "#/$defs/IssueFilter"
                },
                {
                  "type": "null"
                }
              ]
            },
            "page": {
              "$ref": "#/$defs/PageArgs"
            }
          },
          "additionalProperties": false,
          "$defs": {
            "IssueFilter": {
              "type": "object",
              "properties": {
                "projectId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "state": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "TRIAGE",
                        "BACKLOG",
                        "TODO",
                        "IN_PROGRESS",
                        "IN_REVIEW",
                        "DONE",
                        "CANCELLED"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "priority": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "NONE",
                        "LOW",
                        "MEDIUM",
                        "HIGH",
                        "URGENT"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "assigneeId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labelId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "sprintId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "titleContains": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false
            },
            "PageArgs": {
              "type": "object",
              "properties": {
                "first": {
                  "type": "integer"
                },
                "after": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "offset": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Page_Issue"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "project",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Project"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "team",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Team"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "org",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "slug": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "slug"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Org"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Org": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Org"
                },
                "id": {
                  "type": "string"
                },
                "slug": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "plan": {
                  "type": "string",
                  "enum": [
                    "FREE",
                    "TEAM",
                    "ENTERPRISE"
                  ]
                },
                "seats": {
                  "type": "integer",
                  "description": "Seats paid for. Only owners and admins of the organisation may read it."
                },
                "teams": {
                  "$ref": "#/$defs/Page_Team"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "slug",
                "name",
                "plan",
                "seats",
                "teams"
              ]
            },
            "Page_Team": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Team"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "member",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Member"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "sprint",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Sprint"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "search",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "q": {
              "type": "string"
            },
            "page": {
              "$ref": "#/$defs/PageArgs"
            }
          },
          "additionalProperties": false,
          "required": [
            "q"
          ],
          "$defs": {
            "PageArgs": {
              "type": "object",
              "properties": {
                "first": {
                  "type": "integer"
                },
                "after": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "offset": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Page_SearchHit"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Page_SearchHit": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "anyOf": [
                      {
                        "$ref": "#/$defs/Issue"
                      },
                      {
                        "$ref": "#/$defs/Project"
                      },
                      {
                        "$ref": "#/$defs/Comment"
                      }
                    ]
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Everything matching a phrase, whatever kind of thing it is. Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "activity",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "projectId": {
              "type": "string"
            },
            "page": {
              "$ref": "#/$defs/PageArgs"
            }
          },
          "additionalProperties": false,
          "required": [
            "projectId"
          ],
          "$defs": {
            "PageArgs": {
              "type": "object",
              "properties": {
                "first": {
                  "type": "integer"
                },
                "after": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "offset": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Page_Activity"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Page_Activity": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Activity"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Activity": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "at": {
                  "type": "string",
                  "format": "date-time"
                },
                "actor": {
                  "$ref": "#/$defs/Member"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "at",
                "actor"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "What happened in a project, newest first: one page holding several kinds of fact. Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "notifications",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "page": {
              "$ref": "#/$defs/PageArgs"
            }
          },
          "additionalProperties": false,
          "$defs": {
            "PageArgs": {
              "type": "object",
              "properties": {
                "first": {
                  "type": "integer"
                },
                "after": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "offset": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Page_Notification"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Page_Notification": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Notification"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Notification": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Notification"
                },
                "id": {
                  "type": "string"
                },
                "recipientId": {
                  "type": "string"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "ASSIGNED",
                    "MENTIONED",
                    "STATE_CHANGED",
                    "COMMENTED"
                  ]
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "at": {
                  "type": "string",
                  "format": "date-time"
                },
                "readAt": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "recipientId",
                "kind",
                "issue",
                "at"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Read-only.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "createIssue",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "input": {
              "$ref": "#/$defs/IssueInput"
            }
          },
          "additionalProperties": false,
          "required": [
            "input"
          ],
          "$defs": {
            "IssueInput": {
              "type": "object",
              "properties": {
                "projectId": {
                  "type": "string"
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "assigneeId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labelIds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "parentId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                }
              },
              "additionalProperties": false,
              "required": [
                "projectId",
                "title"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Issue"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Open an issue. Returns it with the fields the board needs, and patches the board's counts. May fail with: NotFound, Forbidden. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "createIssue.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "input": {
              "$ref": "#/$defs/IssueInput"
            }
          },
          "additionalProperties": false,
          "required": [
            "input"
          ],
          "$defs": {
            "IssueInput": {
              "type": "object",
              "properties": {
                "projectId": {
                  "type": "string"
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "assigneeId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labelIds": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "parentId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                }
              },
              "additionalProperties": false,
              "required": [
                "projectId",
                "title"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Issue"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Dry run of createIssue: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "moveIssue",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "to": {
              "type": "string",
              "enum": [
                "TRIAGE",
                "BACKLOG",
                "TODO",
                "IN_PROGRESS",
                "IN_REVIEW",
                "DONE",
                "CANCELLED"
              ]
            }
          },
          "additionalProperties": false,
          "required": [
            "id",
            "to"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Issue"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Move an issue to another state. Refuses transitions the workflow does not allow. May fail with: NotFound, InvalidTransition, Forbidden. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "moveIssue.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "to": {
              "type": "string",
              "enum": [
                "TRIAGE",
                "BACKLOG",
                "TODO",
                "IN_PROGRESS",
                "IN_REVIEW",
                "DONE",
                "CANCELLED"
              ]
            }
          },
          "additionalProperties": false,
          "required": [
            "id",
            "to"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Issue"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Dry run of moveIssue: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "updateIssue",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "patch": {
              "$ref": "#/$defs/IssuePatch"
            }
          },
          "additionalProperties": false,
          "required": [
            "id",
            "patch"
          ],
          "$defs": {
            "IssuePatch": {
              "type": "object",
              "properties": {
                "title": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "priority": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "NONE",
                        "LOW",
                        "MEDIUM",
                        "HIGH",
                        "URGENT"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "assigneeId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "sprintId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "description": "Partial update: absent fields are left unchanged."
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Issue"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Change some fields of an issue; fields not sent are left as they are. May fail with: NotFound, Forbidden. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "updateIssue.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "patch": {
              "$ref": "#/$defs/IssuePatch"
            }
          },
          "additionalProperties": false,
          "required": [
            "id",
            "patch"
          ],
          "$defs": {
            "IssuePatch": {
              "type": "object",
              "properties": {
                "title": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "priority": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "NONE",
                        "LOW",
                        "MEDIUM",
                        "HIGH",
                        "URGENT"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "assigneeId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "sprintId": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "description": "Partial update: absent fields are left unchanged."
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Issue"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Dry run of updateIssue: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "assignIssue",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "memberId": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Issue"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "May fail with: NotFound, Forbidden. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "assignIssue.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "memberId": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Issue"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Dry run of assignIssue: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "addComment",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "input": {
              "$ref": "#/$defs/CommentInput"
            }
          },
          "additionalProperties": false,
          "required": [
            "input"
          ],
          "$defs": {
            "CommentInput": {
              "type": "object",
              "properties": {
                "issueId": {
                  "type": "string"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                }
              },
              "additionalProperties": false,
              "required": [
                "issueId",
                "body"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Comment"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "May fail with: NotFound, Forbidden. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "addComment.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "input": {
              "$ref": "#/$defs/CommentInput"
            }
          },
          "additionalProperties": false,
          "required": [
            "input"
          ],
          "$defs": {
            "CommentInput": {
              "type": "object",
              "properties": {
                "issueId": {
                  "type": "string"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                }
              },
              "additionalProperties": false,
              "required": [
                "issueId",
                "body"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Comment"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Dry run of addComment: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "deleteComment",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Comment"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "May fail with: NotFound, Forbidden. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "deleteComment.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Comment"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            }
          }
        },
        "description": "Dry run of deleteComment: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "createProject",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "input": {
              "$ref": "#/$defs/ProjectInput"
            }
          },
          "additionalProperties": false,
          "required": [
            "input"
          ],
          "$defs": {
            "ProjectInput": {
              "type": "object",
              "properties": {
                "teamId": {
                  "type": "string"
                },
                "name": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 120
                  },
                  "minLength": 1,
                  "maxLength": 120
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "teamId",
                "name",
                "key"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Project"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "May fail with: NotFound, Forbidden. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "createProject.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "input": {
              "$ref": "#/$defs/ProjectInput"
            }
          },
          "additionalProperties": false,
          "required": [
            "input"
          ],
          "$defs": {
            "ProjectInput": {
              "type": "object",
              "properties": {
                "teamId": {
                  "type": "string"
                },
                "name": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 120
                  },
                  "minLength": 1,
                  "maxLength": 120
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "teamId",
                "name",
                "key"
              ]
            }
          }
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/Project"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Dry run of createProject: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "closeSprint",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "carryTo": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/BulkResult"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "BulkResult": {
              "type": "object",
              "properties": {
                "sprint": {
                  "$ref": "#/$defs/Sprint"
                },
                "moved": {
                  "type": "integer"
                },
                "carriedOver": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "sprint",
                "moved",
                "carriedOver"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Close a sprint: everything unfinished moves to the next one. One command, many entities changed. May fail with: NotFound, SprintNotActive, Forbidden. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "closeSprint.simulate",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "carryTo": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "additionalProperties": false,
          "required": [
            "id"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "$ref": "#/$defs/BulkResult"
            }
          },
          "required": [
            "result"
          ],
          "$defs": {
            "BulkResult": {
              "type": "object",
              "properties": {
                "sprint": {
                  "$ref": "#/$defs/Sprint"
                },
                "moved": {
                  "type": "integer"
                },
                "carriedOver": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "sprint",
                "moved",
                "carriedOver"
              ]
            },
            "Sprint": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Sprint"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "UPCOMING",
                    "ACTIVE",
                    "CLOSED"
                  ]
                },
                "startsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "endsAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "name",
                "state",
                "startsAt",
                "endsAt",
                "project",
                "issues"
              ]
            },
            "Project": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Project"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "PLANNED",
                    "ACTIVE",
                    "PAUSED",
                    "COMPLETED",
                    "ARCHIVED"
                  ]
                },
                "startDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "targetDate": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "team": {
                  "$ref": "#/$defs/Team"
                },
                "lead": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "summary": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "A long rollup that costs real work to build; it arrives after the rest of the page."
                },
                "spend": {
                  "anyOf": [
                    {
                      "type": "string",
                      "pattern": "^-?\\d+(\\.\\d+)?$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Read from the billing service, which is allowed to be down without failing the page."
                },
                "issues": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "sprints": {
                  "$ref": "#/$defs/Page_Sprint"
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "status",
                "team",
                "issues",
                "sprints",
                "labels"
              ]
            },
            "Team": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Team"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 2,
                    "max": 5
                  },
                  "minLength": 2,
                  "maxLength": 5
                },
                "name": {
                  "type": "string"
                },
                "members": {
                  "$ref": "#/$defs/Page_Member"
                },
                "projects": {
                  "$ref": "#/$defs/Page_Project"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "name",
                "members",
                "projects"
              ]
            },
            "Page_Member": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Member"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Member": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Member"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "user": {
                  "$ref": "#/$defs/User"
                },
                "role": {
                  "type": "string",
                  "enum": [
                    "OWNER",
                    "ADMIN",
                    "MEMBER",
                    "GUEST"
                  ]
                },
                "joinedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "assigned": {
                  "$ref": "#/$defs/Page_Issue",
                  "description": "Issues assigned to this member, newest first."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "user",
                "role",
                "joinedAt",
                "assigned"
              ]
            },
            "User": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "User"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "email": {
                  "type": "string",
                  "description": "Private: a member sees their own address, admins see any."
                },
                "avatarUrl": {
                  "anyOf": [
                    {
                      "type": [
                        "string",
                        "number"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "email"
              ]
            },
            "Page_Issue": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Issue"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Issue": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Issue"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "key": {
                  "type": "string",
                  "description": "Human key, like ENG-142."
                },
                "title": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 200
                  },
                  "minLength": 1,
                  "maxLength": 200
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The full body. Large, and rarely needed on a list, so it is sent after the rest of the frame."
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "TRIAGE",
                    "BACKLOG",
                    "TODO",
                    "IN_PROGRESS",
                    "IN_REVIEW",
                    "DONE",
                    "CANCELLED"
                  ]
                },
                "priority": {
                  "type": "string",
                  "enum": [
                    "NONE",
                    "LOW",
                    "MEDIUM",
                    "HIGH",
                    "URGENT"
                  ]
                },
                "estimate": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "x-rayfold-range": {
                    "min": 0,
                    "max": 21
                  },
                  "minimum": 0,
                  "maximum": 21
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "updatedAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer",
                  "description": "Bumped on every write; send it back as ifVersion (or If-Match) to avoid lost updates."
                },
                "project": {
                  "$ref": "#/$defs/Project"
                },
                "sprint": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Sprint"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "reporter": {
                  "$ref": "#/$defs/Member"
                },
                "assignee": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Member"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "labels": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Label"
                  }
                },
                "parent": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/Issue"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "children": {
                  "$ref": "#/$defs/Page_Issue"
                },
                "comments": {
                  "$ref": "#/$defs/Page_Comment"
                },
                "attachments": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Attachment"
                  }
                },
                "externalState": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "The state in the customer's own tracker. A flaky integration: it may fail without failing the issue."
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "key",
                "title",
                "state",
                "priority",
                "createdAt",
                "updatedAt",
                "version",
                "project",
                "reporter",
                "labels",
                "children",
                "comments",
                "attachments"
              ]
            },
            "Label": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Label"
                },
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "color": {
                  "type": "string"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "name",
                "color"
              ]
            },
            "Page_Comment": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Comment"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Comment": {
              "type": "object",
              "properties": {
                "$type": {
                  "const": "Comment"
                },
                "id": {
                  "type": "string"
                },
                "orgId": {
                  "type": "string"
                },
                "issue": {
                  "$ref": "#/$defs/Issue"
                },
                "author": {
                  "$ref": "#/$defs/Member"
                },
                "body": {
                  "type": "string",
                  "x-rayfold-range": {
                    "min": 1,
                    "max": 10000
                  },
                  "minLength": 1,
                  "maxLength": 10000
                },
                "createdAt": {
                  "type": "string",
                  "format": "date-time"
                },
                "version": {
                  "type": "integer"
                }
              },
              "additionalProperties": false,
              "required": [
                "id",
                "orgId",
                "issue",
                "author",
                "body",
                "createdAt",
                "version"
              ]
            },
            "Attachment": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string"
                },
                "contentType": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "url": {
                  "type": [
                    "string",
                    "number"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "filename",
                "contentType",
                "size",
                "url"
              ]
            },
            "Page_Project": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Project"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            },
            "Page_Sprint": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Sprint"
                  }
                },
                "cursor": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "hasMore": {
                  "type": "boolean"
                },
                "total": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "items",
                "hasMore"
              ]
            }
          }
        },
        "description": "Dry run of closeSprint: returns the would-be result and effects without committing.",
        "annotations": {
          "readOnlyHint": true,
          "idempotentHint": true
        }
      },
      {
        "name": "readNotifications",
        "inputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "upTo": {
              "type": "string",
              "format": "date-time"
            }
          },
          "additionalProperties": false,
          "required": [
            "upTo"
          ]
        },
        "outputSchema": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "type": "object",
          "properties": {
            "result": {
              "type": "integer"
            }
          },
          "required": [
            "result"
          ]
        },
        "description": "Mark every notification up to a point as read. Idempotent by nature, so no key is required. Changes state; idempotent per call key.",
        "annotations": {
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": true
        }
      }
    ],
    "ttlMs": 300000,
    "cacheScope": "public"
  }
}
POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "createIssue",
      "args": {
        "input": {
          "projectId": "p1",
          "title": "Dry run"
        }
      },
      "key": "ws-dry-000000001",
      "simulate": true,
      "shape": "{ key state }"
    }
  ]
... 1 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "ok": {
    "$type": "Issue",
    "key": "ING-101",
    "state": "TRIAGE"
  },
  "patch": [
    {
      "invOp": [
        "board",
        "issues",
        "activity"
      ]
    }
  ],
... 5 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "createIssue",
      "args": {
        "input": {
          "projectId": "p1",
          "title": "Dry run"
        }
      },
      "key": "ws-dry-000000001",
      "simulate": true,
      "shape": "{ key state }"
    }
  ]
}
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Issue",
    "key": "ING-101",
    "state": "TRIAGE"
  },
  "patch": [
    {
      "invOp": [
        "board",
        "issues",
        "activity"
      ]
    }
  ],
  "meta": {
    "cost": 1
  },
  "fin": true
}
1 more request
POST /rayfold
authorization: Bearer u01
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "issues",
      "args": {
        "filter": {
          "projectId": "p1"
        },
        "page": {
          "first": 1
        }
      },
      "shape": "{ total }"
    }
  ]
... 1 more lines
200 OK
cache-control: no-store
content-type: application/rayfold-frames+json

{
  "id": 1,
  "data": {
    "total": 100
  },
  "meta": {
    "cost": 6
  },
  "fin": true
}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "issues",
      "args": {
        "filter": {
          "projectId": "p1"
        },
        "page": {
          "first": 1
        }
      },
      "shape": "{ total }"
    }
  ]
}

The domain is in examples/workspace-ts; the scenarios are e2e/workspace.test.ts. Every number here is produced by that test run, not written by hand.

Real browser

Tested in a real browser, against real data

A real Chrome window driven step by step: the app's own bundled @rayfold/client talking to a running Rayfold server. Sign-in, search, opening a book, buying and paying were done with real clicks and typing; later runs repeated the same steps through the page's own forms and buttons. The full Project Gutenberg catalogue: 78,086 real books by 26,263 authors, plus the demo's 4 seed books.

Chrome 152 on Windows, 2026-09-10. The app is in examples/bookstore-web; run it with npm run demo.

What a customer did

  1. Sign in with a session cookie. Signed in as alice (customer).
  2. Search titles for "frankenstein" across 78,090 books. 6 matches in 53 ms, including the French translation in three volumes.
  3. Open Frankenstein (Project Gutenberg ebook 84). Title, author with life dates 1797-1851, 25 books by the author, live stock 1,000,000, all in one request.
  4. Buy one copy. Order o1 PLACED. A second tab showing the same book received stock 999,999 over WebSocket without any HTTP request.
  5. Pay for the order. o1 PAID. The whole session so far used 8 HTTP requests and received 20,904 bytes.

Behind a reverse proxy

  • Behind a proxy that rewrites Host (as nginx proxy_pass does), with no allowed origins. Search and the book page work (safe reads). Buying is refused with 403 "Origin http://localhost:4612 is not allowed", the WebSocket is refused, and no order is created.
  • The same proxy with RAYFOLD_ALLOWED_ORIGINS=http://localhost:4612. Buy, pay and a second buy work through the proxy, the WebSocket opens through it, and a tab on the direct origin received both stock changes live.

Another website tried to act as the customer

http://localhost:4611, a page on another origin. It shares the host with the demo, so the browser sends the SameSite=Lax session cookie with every attempt.

AttemptWhat that page could observe
POST a placeOrder batch to /rayfold as text/plain, with the cookie (a request browsers send without asking)sent; the response is opaque to this page (opaque)
POST the same batch as application/rayfold+json, with the cookie (needs a CORS preflight)the browser blocked it: Failed to fetch
Submit an HTML form to POST /orders/o2/pay (pays the visitor's unpaid order)form submitted; the result page is cross-origin and unreadable
Open a WebSocket to /rayfold/ws (the browser attaches the cookie) and send placeOrderthe handshake was refused (no socket)
POST MCP tools/call placeOrder to /mcp as text/plain, with the cookiesent; the response is opaque to this page (opaque)
Read the visitor's orders from /rayfold (a safe read, with the cookie)the browser blocked it: Failed to fetch

Found and fixed during this run

Security

28 attacks tried, every one refused

Each row is an automated test that sends the attack to a running Rayfold server and checks that it fails safely. Next to it, a second test proves the defence does not also block honest use. No software can promise it will never be broken; what Rayfold can promise is that these defences are part of the protocol and are tested on every change.

Requests a web page could make

ResultAttackDefenceHonest use still worksRuntimes
refusedA web page posts a command as text/plain, the one body type browsers send to other sites without a preflight check.
request and response
POST /rayfold
host: 127.0.0.1:50729
content-type: text/plain
origin: https://evil.example
authorization: Bearer admin

{
  "ops": [
    {
      "id": 1,
      "op": "restock",
      "args": {
        "bookId": "b1",
        "qty": 50
      },
      "key": "attack-key-0000000001"
    }
  ]
}
415 Unsupported Media Type
x-content-type-options: nosniff
content-type: application/problem+json
cache-control: no-store
accept-post: application/rayfold+json, application/json, application/rayfold

{
  "type": "https://eddyboutros.github.io/rayfold/errors/unsupported_media_type",
  "title": "unsupported media type",
  "status": 415,
  "detail": "Content-Type text/plain is not accepted; send application/rayfold+json",
  "code": "invalid_argument"
}
Bodies must be application/rayfold+json, application/json or application/rayfold; anything else gets 415 before parsing.The same command sent as application/rayfold+json runs.TypeScript, Kotlin
refusedA page on another site sends a JSON command with the user's credentials.
request and response
POST /rayfold
host: 127.0.0.1:50741
content-type: application/rayfold+json
origin: https://evil.example
authorization: Bearer admin

{
  "ops": [
    {
      "id": 1,
      "op": "restock",
      "args": {
        "bookId": "b1",
        "qty": 50
      },
      "key": "attack-key-0000000001"
    }
  ]
}
403 Forbidden
x-content-type-options: nosniff
content-type: application/problem+json
cache-control: no-store

{
  "type": "https://eddyboutros.github.io/rayfold/errors/permission_denied",
  "title": "permission denied",
  "status": 403,
  "detail": "Origin https://evil.example is not allowed",
  "code": "permission_denied"
}
Requests that change data and carry an Origin must come from the server's own origin or an allowed one; others get 403.The same request from the server's own origin runs.TypeScript, Kotlin
refusedAn HTML form on another site posts to POST /orders/{id}/pay, a route with no body.
request and response
POST /orders/o1/pay
host: 127.0.0.1:50747
content-type: application/x-www-form-urlencoded
origin: https://evil.example
authorization: Bearer u1

403 Forbidden
x-content-type-options: nosniff
content-type: application/problem+json
cache-control: no-store

{
  "type": "https://eddyboutros.github.io/rayfold/errors/permission_denied",
  "title": "permission denied",
  "status": 403,
  "detail": "Origin https://evil.example is not allowed",
  "code": "permission_denied"
}
The Origin check covers the REST-style routes too, and POST routes also require an Idempotency-Key header, which a form cannot set.The same POST from an app, with its Idempotency-Key, pays the order.TypeScript, Kotlin
refusedA page renames its own domain to 127.0.0.1 (DNS rebinding) to talk to a server on the user's machine as if it were the same site.
request and response
GET /rayfold/manifest
host: evil.example:50750
403 Forbidden
x-content-type-options: nosniff
content-type: application/problem+json
cache-control: no-store

{
  "type": "https://eddyboutros.github.io/rayfold/errors/permission_denied",
  "title": "permission denied",
  "status": 403,
  "detail": "Host evil.example:50750 is not allowed on a loopback server",
  "code": "permission_denied"
}
A server reached on a loopback address answers only loopback host names (localhost, 127.0.0.1, [::1]); other Host headers get 403.The same request with Host 127.0.0.1 is answered.TypeScript, Kotlin
refusedA web page sends tools/call to the MCP endpoint of a Rayfold server on the user's machine or intranet.
request and response
POST /mcp
host: 127.0.0.1:50762
content-type: application/json
origin: https://evil.example
authorization: Bearer admin

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "restock",
    "arguments": {
      "bookId": "b1",
      "qty": 5
    }
  }
}
403 Forbidden
content-type: application/problem+json
cache-control: no-store
x-content-type-options: nosniff

{
  "type": "https://eddyboutros.github.io/rayfold/errors/permission_denied",
  "title": "permission denied",
  "status": 403,
  "detail": "Origin https://evil.example is not allowed",
  "code": "permission_denied"
}
MCP requests with a foreign Origin get 403, as the MCP specification requires, and loopback servers check the Host header.An AI client (no browser Origin) lists and calls tools.TypeScript, Kotlin
refusedA page sends MCP JSON-RPC as text/plain to avoid the browser's preflight check.
request and response
POST /mcp
host: 127.0.0.1:50765
content-type: text/plain

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list"
}
415 Unsupported Media Type
content-type: application/problem+json
cache-control: no-store
x-content-type-options: nosniff

{
  "type": "https://eddyboutros.github.io/rayfold/errors/unsupported_media_type",
  "title": "unsupported media type",
  "status": 415,
  "detail": "Content-Type text/plain is not accepted; send application/json",
  "code": "invalid_argument"
}
The MCP endpoint accepts only application/json (415 otherwise).tools/list as application/json is answered.TypeScript, Kotlin
refusedA page on another site opens a WebSocket to Rayfold; the browser attaches the user's cookies to the handshake.
request and response
GET /rayfold/ws
host: 127.0.0.1:50777
upgrade: websocket
origin: https://evil.example
403 Forbidden

Origin https://evil.example is not allowed
The handshake is refused with 403 unless the Origin is the server's own or allowed (and the Host is valid).A client without a foreign Origin gets 101 Switching Protocols.TypeScript, Kotlin

Overload and resource exhaustion

ResultAttackDefenceHonest use still worksRuntimes
refusedA request nests its arguments 10,000 levels deep to exhaust the server's stack.
request and response
POST /rayfold
host: 127.0.0.1:50792
content-type: application/rayfold+json
accept: application/json

{"ops":[{"id":1,"op":"book","args":{"id":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x":{"x"... (60,049 characters in all)
400 Bad Request
x-content-type-options: nosniff
content-type: application/json; charset=utf-8

{
  "error": {
    "code": "invalid_argument",
    "message": "ops[0].args: nested deeper than 64 levels"
  },
  "fin": true
}
Arguments and variables deeper than 64 levels fail the batch with invalid_argument, checked without recursion.A normal request is answered.TypeScript, Kotlin
refusedA shape nested 5,000 levels deep, to make the parser recurse until it crashes.
request and response
POST /rayfold
host: 127.0.0.1:50798
content-type: application/rayfold+json
accept: application/json

{"ops":[{"id":1,"op":"book","args":{"id":"b1"},"shape":"{ author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { items { author { books { ... (52,766 characters in all)
400 Bad Request
x-content-type-options: nosniff
content-type: application/json; charset=utf-8

{
  "error": {
    "code": "invalid_argument",
    "message": "Bad shape: Shape nested deeper than 64 levels (1:535)"
  },
  "fin": true,
  "id": 1
}
The shape parser stops at 64 levels of nesting and answers invalid_argument; execution depth is capped separately (8 by default).A shape nested a few levels runs.TypeScript, Kotlin
refusedThree expensive list queries plus a fourth with a page size of -100,000, hoping the negative size cancels out their cost.
request and response
POST /rayfold
host: 127.0.0.1:50804
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title author { name } } }"
    },
    {
      "id": 2,
      "op": "books",
      "args": {
... 27 more lines
200 OK
x-content-type-options: nosniff
content-type: application/rayfold-frames+json
cache-control: no-store

{
  "error": {
    "code": "resource_exhausted",
    "message": "Batch cost 1218 exceeds budget 1000",
    "data": {
      "cost": 1218,
      "budget": 1000
    }
  },
  "fin": true
}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title author { name } } }"
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title author { name } } }"
    },
    {
      "id": 3,
      "op": "books",
      "args": {
        "page": {
          "first": 200
        }
      },
      "shape": "{ items { id title author { name } } }"
    },
    {
      "id": 4,
      "op": "books",
      "args": {
        "page": {
          "first": -100000
        }
      }
    }
  ]
}
An op with invalid arguments never runs and costs 0; untrusted page sizes count as the largest page; every op costs at least 1.One of the expensive queries alone fits the budget and runs.TypeScript, Kotlin
refusedA 1.5 MB request body, to make the server buffer and parse huge input.
request and response
POST /rayfold
host: 127.0.0.1:50814
content-type: application/rayfold+json

{"ops":[{"id":1,"op":"book","args":{"id":"b1","pad":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx... (1,500,058 characters in all)
413 Content Too Large
x-content-type-options: nosniff
content-type: application/problem+json
cache-control: no-store

{
  "type": "https://eddyboutros.github.io/rayfold/errors/payload_too_large",
  "title": "payload too large",
  "status": 413,
  "detail": "Body exceeds 1048576 bytes",
  "code": "resource_exhausted"
}
Bodies over the limit (1 MiB by default) get 413 Content Too Large; the rest of the upload is drained up to a bound, then the connection is cut.A normal body is answered.TypeScript, Kotlin
refusedA WebSocket client announces a 2 MiB frame and keeps streaming, to fill the server's memory.
request and response
WebSocket frame /rayfold/ws

text frame announcing 2,097,152 bytes, then 1.2 MB of data
101 

close frame, code 1009 (message too big)
Frames and assembled messages over 1 MiB close the connection with code 1009 (message too big).A normal message on a new socket is answered.TypeScript, Kotlin
refusedA client sends thousands of distinct inline shapes; each one used to be remembered forever.
request and response
POST /rayfold
host: 127.0.0.1:50843
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      },
      "shape": "{ id format price stock alias29: title }"
    }
  ]
}
200 OK
x-content-type-options: nosniff
content-type: application/rayfold-frames+json
cache-control: no-store

{
  "id": 1,
  "data": {
    "$type": "Book",
    "id": "b1",
    "format": "PAPERBACK",
    "price": "12.99",
    "stock": 5,
    "alias29": "The Dispossessed"
  },
  "meta": {
    "cost": 1
  },
  "fin": true
}
Shapes learned from requests are kept up to a limit (10,000 by default; 10 in this test), least recently used first out; rejected shapes are never kept.Shapes registered by the server itself stay, and every request is still answered.TypeScript, Kotlin
refusedA client sends thousands of commands with new idempotency keys; the records used to be kept until someone read them again.
request and response
POST /rayfold
host: 127.0.0.1:50873
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "restock",
      "args": {
        "bookId": "b1",
        "qty": 1
      },
      "key": "attack-key-0000000001-29"
    }
  ]
}
200 OK
x-content-type-options: nosniff
content-type: application/rayfold-frames+json
cache-control: no-store

{
  "id": 1,
  "ok": {
    "$type": "Book",
    "id": "b1",
    "title": "The Dispossessed",
    "format": "PAPERBACK",
    "price": "12.99",
    "stock": 35,
    "author": {
      "$type": "Author",
      "id": "a1",
      "name": "Ursula K. Le Guin"
    }
  },
  "patch": [
... 28 more lines
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Book",
    "id": "b1",
    "title": "The Dispossessed",
    "format": "PAPERBACK",
    "price": "12.99",
    "stock": 35,
    "author": {
      "$type": "Author",
      "id": "a1",
      "name": "Ursula K. Le Guin"
    }
  },
  "patch": [
    {
      "set": "Book:b1",
      "value": {
        "$type": "Book",
        "id": "b1",
        "title": "The Dispossessed",
        "format": "PAPERBACK",
        "price": "12.99",
        "stock": 35,
        "author": {
          "$ref": "Author:a1"
        }
      }
    },
    {
      "set": "Author:a1",
      "value": {
        "$type": "Author",
        "id": "a1",
        "name": "Ursula K. Le Guin"
      }
    }
  ],
  "meta": {
    "cost": 2
  },
  "fin": true
}
Records expire (24 hours by default), expired ones are swept on every write, and past a size limit (100,000 by default; 10 here) the oldest go first.The most recent key still replays its result.TypeScript, Kotlin
refusedA client sends a negative or enormous deadline.
request and response
POST /rayfold
host: 127.0.0.1:50895
content-type: application/rayfold+json
accept: application/json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      }
    }
  ],
  "meta": {
    "deadline": -1
  }
}
400 Bad Request
x-content-type-options: nosniff
content-type: application/json; charset=utf-8

{
  "error": {
    "code": "invalid_argument",
    "message": "meta.deadline: expected whole milliseconds from 0 to 600000"
  },
  "fin": true
}
Deadlines must be whole milliseconds from 0 to 600,000; anything else is invalid_argument.A 5,000 ms deadline is honoured.TypeScript, Kotlin
refusedA client opens a WebSocket, starts a live query, then vanishes without a close frame, so the server would keep the socket and the subscription forever.The server closes its side as soon as the client's side ends, which cancels that connection's live queries.While the connection is open, its live query stays subscribed.TypeScript, Kotlin

Replays and retries

ResultAttackDefenceHonest use still worksRuntimes
refusedA client reuses the key of a paid order's payOrder call on cancelOrder, so the cancel is answered with the stored payment result and never runs.
request and response
POST /rayfold
host: 127.0.0.1:50903
content-type: application/rayfold+json
authorization: Bearer u1

{
  "ops": [
    {
      "id": 1,
      "op": "cancelOrder",
      "args": {
        "id": "o1"
      },
      "key": "attack-key-0000000001"
    }
  ]
}
200 OK
x-content-type-options: nosniff
content-type: application/rayfold-frames+json
cache-control: no-store

{
  "id": 1,
  "error": {
    "code": "already_exists",
    "message": "Idempotency key attack-key-0000000001 was used for another operation or other arguments"
  },
  "fin": true
}
A key is bound to its operation and arguments; reusing it for anything else is already_exists, and the write policy is checked before any replay.Retrying payOrder with its own key replays the payment.TypeScript, Kotlin
refusedAn app on a flaky network sends the same order twice at the same moment; both copies used to run.
request and response
POST /rayfold
host: 127.0.0.1:50913
content-type: application/rayfold+json
authorization: Bearer u1

{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "attack-key-0000000001"
... 3 more lines
200 OK
x-content-type-options: nosniff
content-type: application/rayfold-frames+json
cache-control: no-store

{
  "id": 1,
  "ok": {
    "$type": "Order",
    "id": "o1",
    "status": "PLACED",
    "total": "8.00",
    "items": [
      {
        "qty": 1,
        "unitPrice": "8.00",
        "book": {
          "$type": "Book",
          "id": "b3",
          "title": "Kindred"
        }
... 43 more lines
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "placeOrder",
      "args": {
        "input": {
          "lines": [
            {
              "bookId": "b3",
              "qty": 1
            }
          ]
        }
      },
      "key": "attack-key-0000000001"
    }
  ]
}
Full response body
{
  "id": 1,
  "ok": {
    "$type": "Order",
    "id": "o1",
    "status": "PLACED",
    "total": "8.00",
    "items": [
      {
        "qty": 1,
        "unitPrice": "8.00",
        "book": {
          "$type": "Book",
          "id": "b3",
          "title": "Kindred"
        }
      }
    ]
  },
  "patch": [
    {
      "set": "Order:o1",
      "value": {
        "$type": "Order",
        "id": "o1",
        "status": "PLACED",
        "total": "8.00",
        "items": [
          {
            "qty": 1,
            "unitPrice": "8.00",
            "book": {
              "$ref": "Book:b3"
            }
          }
        ]
      }
    },
    {
      "set": "Book:b3",
      "value": {
        "$type": "Book",
        "id": "b3",
        "title": "Kindred"
      }
    },
    {
      "set": "Book:b3",
      "value": {
        "stock": 99
      }
    }
  ],
  "meta": {
    "cost": 3,
    "replay": true
  },
  "fin": true
}
The first request claims the key; the second waits for it to finish and replays its result.Both requests get the same order back.TypeScript, Kotlin
refusedEvery anonymous caller shares one replay scope, so one guest could replay another guest's result, or probe which keys exist.A command with an idempotency key needs an identified caller (a user, service or guest session); anonymous keyed commands are unauthenticated.An identified caller's retry replays its own result.TypeScript, Kotlin

Data exposure and trust

ResultAttackDefenceHonest use still worksRuntimes
refusedA customer asks for other customers' order ids with an explicit shape, to learn which orders exist.
request and response
POST /rayfold
host: 127.0.0.1:50932
content-type: application/rayfold+json
authorization: Bearer u2

{
  "ops": [
    {
      "id": 1,
      "op": "order",
      "args": {
        "id": "o1"
      },
      "shape": "{ id status }"
    }
  ]
}
200 OK
x-content-type-options: nosniff
content-type: application/rayfold-frames+json
cache-control: no-store

{
  "id": 1,
  "data": null,
  "meta": {
    "cost": 1
  },
  "fin": true
}
A denied entity at a nullable position reads as null even with an explicit shape, so forbidden and missing look the same.The owner gets the order.TypeScript, Kotlin
refusedAn anonymous caller downloads the manifest to read every permission rule, such as who may see costPrice.
request and response
GET /rayfold/manifest
host: 127.0.0.1:50948
200 OK
x-content-type-options: nosniff
content-type: application/json; charset=utf-8

(schema without policy expressions, 18,568 characters)
The manifest keeps names and types but removes policy expressions; the full schema is opt-in, and the manifest can be switched off.Clients still get every type and operation they need.TypeScript, Kotlin
refusedA batch points $ref at "1.constructor" or "1.__proto__" to pull built-in objects into the arguments.
request and response
POST /rayfold
host: 127.0.0.1:50954
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      },
      "shape": "{ id }"
    },
    {
      "id": 2,
      "op": "book",
      "args": {
        "id": {
          "$ref": "1.constructor"
... 6 more lines
200 OK
x-content-type-options: nosniff
content-type: application/rayfold-frames+json
cache-control: no-store

{"id":1,"data":{"$type":"Book","id":"b1"},"meta":{"cost":1},"fin":true}
{"id":2,"error":{"code":"invalid_argument","message":"ops.2.args.id: $ref 1.constructor resolved to nothing"},"fin":true}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      },
      "shape": "{ id }"
    },
    {
      "id": 2,
      "op": "book",
      "args": {
        "id": {
          "$ref": "1.constructor"
        }
      },
      "shape": "{ title }"
    }
  ]
}
$ref paths read only the earlier result's own data; anything else resolves to nothing.$ref to "1.id" passes the book's id along.TypeScript
refusedA request carries a "__proto__" or "constructor" key in its arguments, beside a $ref or in a REST-style body, so the server's copy of the arguments would take attacker data as its prototype and pass on values validation never saw.
request and response
POST /rayfold
host: 127.0.0.1:50958
content-type: application/rayfold+json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      },
      "shape": "{ format }"
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "filter": {
          "format": {
... 14 more lines
200 OK
x-content-type-options: nosniff
content-type: application/rayfold-frames+json
cache-control: no-store

{"id":1,"data":{"$type":"Book","format":"PAPERBACK"},"meta":{"cost":1},"fin":true}
{"id":2,"error":{"code":"invalid_argument","message":"books().__proto__: unknown argument"},"fin":true}
Full request body
{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": "b1"
      },
      "shape": "{ format }"
    },
    {
      "id": 2,
      "op": "books",
      "args": {
        "filter": {
          "format": {
            "$ref": "1.format"
          }
        },
        "__proto__": {
          "page": {
            "first": 1
          },
          "polluted": "yes"
        }
      },
      "shape": "{ total }"
    }
  ]
}
Arguments are copied key by key as plain data, the way JSON.parse reads them, so the key fails validation as an unknown argument and nothing reaches Object.prototype.The same requests without the extra key are served, with the filter and page size they really carry.TypeScript
refusedA binary (RB) request carries an argument object whose key is "__proto__", so decoding it would swap the object's prototype and smuggle in arguments.
request and response
POST /rayfold
host: 127.0.0.1:50966
content-type: application/rayfold
accept: application/rayfold+json

(45 bytes of RB)
200 OK
x-content-type-options: nosniff
content-type: application/rayfold-frames+json
cache-control: no-store

{
  "id": 1,
  "error": {
    "code": "invalid_argument",
    "message": "book().__proto__: unknown argument"
  },
  "fin": true
}
The decoder stores every key as plain data, so the request fails validation as an unknown argument.A normal binary request is answered.TypeScript
refusedAn AI agent asks for a dry run of a command whose code forgets to check ctx.simulate, so the "dry run" would really write.Only commands that declare @simulate accept dry runs, and only they get a .simulate tool in MCP; others answer failed_precondition.Declared commands, such as placeOrder, still offer a dry run that writes nothing.TypeScript, Kotlin
refusedA rule denies payments over 1000, but Decimal amounts travel as text, and text compared with a number used to count as "not greater".Numbers and numeric text compare exactly by value (also beyond 2^53), and a rule that cannot be evaluated fails closed.An amount of 999.99 is allowed.TypeScript, Kotlin
refusedA client sends the id 9007199254740993 as a JSON number, which JavaScript silently rounds to a different id.
request and response
POST /rayfold
host: 127.0.0.1:50985
content-type: application/rayfold+json
accept: application/json

{
  "ops": [
    {
      "id": 1,
      "op": "book",
      "args": {
        "id": 9007199254740992
      }
    }
  ]
}
400 Bad Request
x-content-type-options: nosniff
content-type: application/json; charset=utf-8

{
  "error": {
    "code": "invalid_argument",
    "message": "book().id: expected ID"
  },
  "fin": true,
  "id": 1
}
Integers beyond 2^53 and Decimals written in exponent form are refused; send them as text.The same id as text is accepted.TypeScript
refusedA browser second-guesses a response's type (MIME sniffing) and runs data as a script, or a shared cache keeps an error page.
request and response
POST /rayfold
host: 127.0.0.1:50993
content-type: text/plain

{}
415 Unsupported Media Type
x-content-type-options: nosniff
content-type: application/problem+json
cache-control: no-store
accept-post: application/rayfold+json, application/json, application/rayfold

{
  "type": "https://eddyboutros.github.io/rayfold/errors/unsupported_media_type",
  "title": "unsupported media type",
  "status": 415,
  "detail": "Content-Type text/plain is not accepted; send application/rayfold+json",
  "code": "invalid_argument"
}
Every response carries X-Content-Type-Options: nosniff, and refusals carry Cache-Control: no-store.Responses keep their declared content types, and 304 answers stay minimal.TypeScript, Kotlin
All numbers

Every measured result

Round trips per flow requests, fewer is better
01223A. product page (book + author + 3 reviews) / REST: 2 requests2A. product page (book + author + 3 reviews) / GraphQL: 1 requestsA. product page (book + author + 3 reviews) / Rayfold (JSON): 1 requestsA. product page (book + author + 3 reviews) / Rayfold (RB): 1 requests1A. product page (book + auth...B. catalogue list (20 books with author names) / REST: 2 requests2B. catalogue list (20 books with author names) / GraphQL: 1 requestsB. catalogue list (20 books with author names) / Rayfold (JSON): 1 requestsB. catalogue list (20 books with author names) / Rayfold (RB): 1 requests1B. catalogue list (20 books ...C. place order then read it back with book stock / REST: 3 requests3C. place order then read it back with book stock / GraphQL: 2 requestsC. place order then read it back with book stock / Rayfold (JSON): 1 requestsC. place order then read it back with book stock / Rayfold (RB): 1 requests1C. place order then read it ...
Bytes downloaded per flow bytes, fewer is better
07031.4k2.1k2.8kA. product page (book + author + 3 reviews) / REST: 405 bytes405A. product page (book + author + 3 reviews) / GraphQL: 282 bytesA. product page (book + author + 3 reviews) / Rayfold (JSON): 302 bytesA. product page (book + author + 3 reviews) / Rayfold (RB): 177 bytes177A. product page (book + auth...B. catalogue list (20 books with author names) / REST: 2.8k bytes2.8kB. catalogue list (20 books with author names) / GraphQL: 2.1k bytesB. catalogue list (20 books with author names) / Rayfold (JSON): 2.1k bytesB. catalogue list (20 books with author names) / Rayfold (RB): 1.1k bytes1.1kB. catalogue list (20 books ...C. place order then read it back with book stock / REST: 327 bytes327C. place order then read it back with book stock / GraphQL: 157 bytesC. place order then read it back with book stock / Rayfold (JSON): 220 bytesC. place order then read it back with book stock / Rayfold (RB): 101 bytes101C. place order then read it ...
TaskMeasuredRESTGraphQLRayfoldResult
Show one product page: a book, its author and its reviews.requests and bytes for the page (bytes on the wire (request + response))466332177Rayfold ahead
List 20 books with each author's name.author lookups at the backend (author lookups with straightforward code)9201Rayfold ahead
Load only the two fields the screen shows: id and title.bytes on the wire (bytes (Rayfold = RB))2,375821635Rayfold ahead
Place an order, then pay for it. Paying needs the new order's id.round trips for two dependent commands (round trips)221Rayfold ahead
The connection drops after the customer taps Buy, so the app sends the order again.duplicate orders after a retry (duplicate orders (client forgot the key))110Rayfold ahead
An order fails because a book is out of stock.how a client learns the error type (declared in the contract (1 = yes))nonoyesRayfold ahead
A client sends a wrong quantity: first the text 'two', then 0.rejected before side effects? (of 2 bad requests rejected before side effects)012Rayfold ahead
Only a book's owner may see its cost price.where the rule lives / what a denied caller sees (rule in the contract, explicit denial (1 = yes))nonoyesRayfold ahead
Serve a popular product page from a shared cache, such as a CDN.repeat view through a shared cache (bytes on the repeat view (headers + body))486355344Rayfold ahead
After an order, the book list already on screen must show the new stock.requests to make the earlier view correct (extra requests to be correct)110Rayfold ahead
Show stock changes live while the page is open.what the developer writes (pieces the developer writes)341Rayfold ahead
Remove a field from the API without breaking the apps that still use it.what the tooling decides (removals decided right, of 3 (unannounced, before sunset, after sunset))123Rayfold ahead
A client asks for 200 books, each with 200 books, each with 200 books.rejected before execution? (rejected before execution (1 = yes))nonoyesRayfold ahead
Let an AI assistant find and call the API, and try an order as a dry run first.extra work for tools with typed input/output (extra components to build)220Rayfold ahead
One field (the author's biography) is slow. Show the rest of the page first.mechanism (slow field sent later in the same response (1 = yes))nonoyesRayfold ahead
Benchmark table (12 cells, 300 runs each)
FlowImplementationRound tripsBytes downBytes upMedian ms
A. product page (book + author + 3 reviews)REST240500.51
A. product page (book + author + 3 reviews)GraphQL12821570.56
A. product page (book + author + 3 reviews)Rayfold (JSON)13021820.48
A. product page (book + author + 3 reviews)Rayfold (RB)11771430.52
B. catalogue list (20 books with author names)REST22,81000.89
B. catalogue list (20 books with author names)GraphQL12,074890.53
B. catalogue list (20 books with author names)Rayfold (JSON)12,0831420.42
B. catalogue list (20 books with author names)Rayfold (RB)11,080950.48
C. place order then read it back with book stockREST3327350.50
C. place order then read it back with book stockGraphQL21572040.77
C. place order then read it back with book stockRayfold (JSON)12202790.44
C. place order then read it back with book stockRayfold (RB)11011720.46
How it was measured

Same data, same tasks, real HTTP

  • One online bookstore with real titles, authors and reviews, built three times: REST, GraphQL (graphql-js) and Rayfold.
  • The REST and GraphQL versions use the practices careful teams use: ETags, Idempotency-Key, DataLoader batching, server-sent events and subscriptions.
  • Every test sends real HTTP requests to all three servers. A recorder saves each request and response; they are the examples on this page.
  • Each result (ahead, level, behind) is calculated from the measured numbers, never written by hand.
  • A second run loads the full Project Gutenberg catalogue into all three servers and checks every answer against the catalogue itself.
  • A real Chrome browser used the demo app, attacked it from another site and reached it through a reverse proxy.
Limits of this comparison

What these numbers do not show

  • All servers ran on one computer. Time differences under a millisecond say little; the request and byte counts are what matter.
  • The REST and GraphQL versions were written by the same team as Rayfold. A skilled team could close some gaps with extra code; Rayfold's argument is that it should not have to.
  • Ecosystem size, community support and years of production use are not measured here, and REST and GraphQL are far ahead on all three.
Glossary

Terms used on this page

Round trip
One request sent and its answer received. Each round trip waits for the network.
Shape
The list of fields a client wants back, for example { title author { name } }. Rayfold returns exactly that.
Default view
The fields a Rayfold operation returns when the client does not send a shape. Plain calls with curl work.
Batch
Several operations in one Rayfold request. A later operation can use an earlier one's result with $ref.
Idempotency key
A unique label on a write. If the same write arrives twice, the server returns the first answer instead of doing the work again.
Patch
A small description of what changed, such as 'Book b1 now has stock 3'. Rayfold sends patches with every write so client caches stay correct.
Live query
A normal query with live: true. The server keeps it open and sends patches when the data changes.
ETag and 304
An ETag is a fingerprint of an answer. A client that already has the same fingerprint gets 304 Not Modified and no body.
N+1
Loading a list, then one more request or database call for every item in it.
Policy
A permission rule written in the schema, such as 'only the owner may read costPrice'. Rayfold enforces it on every path.
RB
Rayfold Binary, an optional compact encoding of the same messages. JSON always works too.
MCP
Model Context Protocol, the common way AI assistants discover and call tools. Every Rayfold server is also an MCP server.