The delivery re-measured six public Claus endpoints a day after the original report and concluded that edge caching fixed the slow feeds. I re-ran its method, added a test of how long a cached copy lasts, and checked its pagination concern against actual page contents.
The two heavy feeds are now edge-cached, and fast when cached. Cached responses from London took 12–56 ms (one 159 ms outlier on burn.json). Uncached, /api/network-context took 7.6 s and /network.json 5.6 s in the same six-run pass.
A request that misses the cache still pays the full origin build. All but one uncached network-context response in this review took 5.6–9.9 s, and its own observedAt − startedAt shows the origin spent 5.4–9.6 s building it. The exception is covered under hypotheses. network.json misses took 4.1–6.6 s.
"Most requests return in ~0.1–0.5 s instead of ~6 s." A cached copy lasts about 5 seconds. A request 2 s after a fresh response was served from the cache (age 3 s), and requests 4, 6, 8 and 12 s later were all misses (8 of 8). In a 7-minute series at roughly 30-second spacing, 14 of 14 network-context and 13 of 13 network.json requests were misses, and one returned 503. The report's six runs were sequential and close together, which is why most of them were hits. A visitor arriving more than about 5 s after the previous one waits 5–10 s.
"The unique query param did not bypass the cache… the cache key ignores the query string." Today an unknown parameter is rejected: ?probe=… returns HTTP 400 on network-context, network.json, network.json?view=projects and network-activity (body {"error":"invalid_request"}), and on the Claus API task records. Only burn.json accepts it, and there it is a separate cache entry (MISS). I can't tell what the server did on 17 Oct; see the hypotheses below.
"?after= pagination pages should be checked to confirm they aren't served the first page from cache." I checked the contents, not just the headers. ?after=apex returned the 26 projects after apex, the same on the uncached request and on the cached one 5 s later. ?after=signal-layer returned 1 (vector) and ?after=zzz returned 0. None of them matched the first page. Limit: all 29 projects fit on one page today (nextCursor: null), so pages beyond the first can only be reached with a hand-made cursor.
"App records were slower… probably region (this probe is US, Oct 16 was EU)." From London, the records endpoint took 618–752 ms in one pass (about 13:44 UTC) and 339–427 ms in another 20 minutes later. Every response was MISS with cache-control: no-store, served by the same US East function (iad1) as for a US client. The spread between two London passes is as large as the US/EU gap the report attributes to region. The response is also now 59.5 KB, against the report's 33 KB.
Serve stale while revalidating on network-context and network.json. With a ~5 s cache lifetime and a 5–11 s origin build, almost every visitor who isn't part of a burst waits for a rebuild. Serving the last good copy while rebuilding would remove that wait, and probably the occasional 503. The other two suggestions (documented load order, a small counts endpoint) were not tested.
Overall: the report is careful and honest about its limits, and its main measurements reproduce. Its headline, "the main ask looks done", overstates the improvement for real visitors because of the short cache lifetime. Two of its secondary explanations don't hold as of today.
These fit the measurements but I could not confirm them without access to the server configuration or logs.
age seen was 4). Browsers are told max-age=0, must-revalidate, so the CDN lifetime is set somewhere not visible in the response headers.fetch() with cache: "no-store", so the browser cache was never used, and were strictly one at a time. Headers were read same-origin on claus.si.x-vercel-id shows edge lhr1 (London) and function iad1 (US East). The per-request suffix is omitted from the raw data.probe).| Endpoint | Run | Status | Time | Size | Cache | Cache-Control |
|---|---|---|---|---|---|---|
| /api/network-context | 1 (unique param) | 400 | 120 ms | 27 B | MISS · age 0 | no-store |
| /api/network-context | 2 | 200 | 7,636 ms | 32,802 B | MISS · age 0 | public, max-age=0, must-revalidate |
| /api/network-context | 3 | 200 | 56 ms | 32,802 B | HIT · age 1 | public, max-age=0, must-revalidate |
| /api/network-context | 4 (unique param) | 400 | 173 ms | 27 B | MISS · age 0 | no-store |
| /api/network-context | 5 | 200 | 45 ms | 32,802 B | HIT · age 1 | public, max-age=0, must-revalidate |
| /api/network-context | 6 | 200 | 48 ms | 32,802 B | HIT · age 1 | public, max-age=0, must-revalidate |
| /network.json | 1 (unique param) | 400 | 139 ms | 27 B | MISS · age 0 | no-store |
| /network.json | 2 | 200 | 5,608 ms | 23,504 B | MISS · age 0 | public, max-age=0, must-revalidate |
| /network.json | 3 | 200 | 21 ms | 23,504 B | HIT · age 0 | public, max-age=0, must-revalidate |
| /network.json | 4 (unique param) | 400 | 118 ms | 27 B | MISS · age 0 | no-store |
| /network.json | 5 | 200 | 16 ms | 23,504 B | HIT · age 0 | public, max-age=0, must-revalidate |
| /network.json | 6 | 200 | 14 ms | 23,504 B | HIT · age 0 | public, max-age=0, must-revalidate |
| /network.json?view=projects | 1 (unique param) | 400 | 110 ms | 27 B | MISS · age 0 | no-store |
| /network.json?view=projects | 2 | 200 | 741 ms | 26,305 B | MISS · age 0 | public, max-age=0, must-revalidate |
| /network.json?view=projects | 3 | 200 | 21 ms | 26,305 B | HIT · age 0 | public, max-age=0, must-revalidate |
| /network.json?view=projects | 4 (unique param) | 400 | 109 ms | 27 B | MISS · age 0 | no-store |
| /network.json?view=projects | 5 | 200 | 14 ms | 26,305 B | HIT · age 0 | public, max-age=0, must-revalidate |
| /network.json?view=projects | 6 | 200 | 16 ms | 26,305 B | HIT · age 0 | public, max-age=0, must-revalidate |
| /api/network-activity | 1 (unique param) | 400 | 112 ms | 27 B | MISS · age 0 | no-store |
| /api/network-activity | 2 | 200 | 535 ms | 7,904 B | MISS · age 0 | public, max-age=0, must-revalidate |
| /api/network-activity | 3 | 200 | 17 ms | 7,904 B | HIT · age 0 | public, max-age=0, must-revalidate |
| /api/network-activity | 4 (unique param) | 400 | 106 ms | 27 B | MISS · age 0 | no-store |
| /api/network-activity | 5 | 200 | 14 ms | 7,904 B | HIT · age 1 | public, max-age=0, must-revalidate |
| /api/network-activity | 6 | 200 | 12 ms | 7,904 B | HIT · age 1 | public, max-age=0, must-revalidate |
| /burn.json | 1 (unique param) | 200 | 292 ms | 559 B | MISS · age 0 | public, max-age=0, must-revalidate |
| /burn.json | 2 | 200 | 114 ms | 559 B | MISS · age 0 | public, max-age=0, must-revalidate |
| /burn.json | 3 | 200 | 19 ms | 559 B | HIT · age 0 | public, max-age=0, must-revalidate |
| /burn.json | 4 (unique param) | 200 | 113 ms | 559 B | MISS · age 0 | public, max-age=0, must-revalidate |
| /burn.json | 5 | 200 | 23 ms | 559 B | HIT · age 0 | public, max-age=0, must-revalidate |
| /burn.json | 6 | 200 | 159 ms | 559 B | HIT · age 0 | public, max-age=0, must-revalidate |
| Claus API: Claus Jobs task records | 1 (unique param) | 400 | 290 ms | 84 B | MISS · age 0 | no-store |
| Claus API: Claus Jobs task records | 2 | 200 | 370 ms | 59,550 B | MISS · age 0 | no-store |
| Claus API: Claus Jobs task records | 3 | 200 | 427 ms | 59,550 B | MISS · age 0 | no-store |
| Claus API: Claus Jobs task records | 4 (unique param) | 400 | 259 ms | 84 B | MISS · age 0 | no-store |
| Claus API: Claus Jobs task records | 5 | 200 | 339 ms | 59,550 B | MISS · age 0 | no-store |
| Claus API: Claus Jobs task records | 6 | 200 | 419 ms | 59,550 B | MISS · age 0 | no-store |
| Request | Started (UTC) | Time | Cache | Origin build |
|---|---|---|---|---|
| prime | 13:58:53 | 6,926 ms | MISS · age 0 | 6,724 ms |
| after 2 s | 13:59:03 | 27 ms | HIT · age 3 | 6,724 ms |
| prime | 13:59:03 | 22 ms | HIT · age 3 | 6,724 ms |
| after 4 s | 13:59:08 | 6,262 ms | MISS · age 0 | 6,065 ms |
| prime | 13:59:14 | 33 ms | HIT · age 0 | 6,065 ms |
| after 6 s | 13:59:20 | 6,842 ms | MISS · age 0 | 6,616 ms |
| prime | 13:59:27 | 31 ms | HIT · age 0 | 6,616 ms |
| after 8 s | 13:59:36 | 6,403 ms | MISS · age 0 | 6,199 ms |
| prime | 13:59:42 | 20 ms | HIT · age 0 | 6,199 ms |
| after 12 s | 13:59:55 | 6,538 ms | MISS · age 0 | 6,339 ms |
| prime | 14:00:01 | 26 ms | HIT · age 0 | 6,339 ms |
| after 2 s | 14:00:04 | 33 ms | HIT · age 3 | 6,339 ms |
| prime | 14:00:04 | 15 ms | HIT · age 3 | 6,339 ms |
| after 4 s | 14:00:09 | 6,797 ms | MISS · age 0 | 6,599 ms |
| prime | 14:00:15 | 7,225 ms | MISS · age 0 | 7,029 ms |
| after 6 s | 14:00:30 | 7,758 ms | MISS · age 0 | 7,550 ms |
| prime | 14:00:37 | 22 ms | HIT · age 0 | 7,550 ms |
| after 8 s | 14:00:46 | 7,666 ms | MISS · age 0 | 7,443 ms |
| prime | 14:00:53 | 14 ms | HIT · age 0 | 7,443 ms |
| after 12 s | 14:01:06 | 6,264 ms | MISS · age 0 | 6,062 ms |
| Endpoint | Started (UTC) | Status | Time | Cache |
|---|---|---|---|---|
| /api/network-context | 13:45:09 | 200 | 7,478 ms | MISS |
| /network.json | 13:45:16 | 200 | 5,278 ms | MISS |
| /api/network-context | 13:45:42 | 200 | 9,861 ms | MISS |
| /network.json | 13:45:51 | 200 | 6,574 ms | MISS |
| /api/network-context | 13:46:19 | 200 | 6,830 ms | MISS |
| /network.json | 13:46:25 | 200 | 6,342 ms | MISS |
| /api/network-context | 13:46:53 | 200 | 1,038 ms | MISS |
| /network.json | 13:46:54 | 200 | 4,700 ms | MISS |
| /api/network-context | 13:47:19 | 200 | 6,174 ms | MISS |
| /network.json | 13:47:25 | 200 | 4,995 ms | MISS |
| /api/network-context | 13:47:51 | 200 | 6,417 ms | MISS |
| /network.json | 13:47:57 | 200 | 4,595 ms | MISS |
| /api/network-context | 13:48:23 | 200 | 7,626 ms | MISS |
| /network.json | 13:48:30 | 200 | 4,146 ms | MISS |
| /api/network-context | 13:48:55 | 200 | 7,206 ms | MISS |
| /network.json | 13:49:02 | 200 | 5,172 ms | MISS |
| /api/network-context | 13:49:28 | 200 | 6,036 ms | MISS |
| /network.json | 13:49:34 | 200 | 4,631 ms | MISS |
| /api/network-context | 13:49:59 | 503 | 323 ms | MISS |
| /network.json | 13:49:59 | 200 | 5,182 ms | MISS |
| /api/network-context | 13:50:25 | 200 | 6,738 ms | MISS |
| /network.json | 13:50:31 | 200 | 4,617 ms | MISS |
| /api/network-context | 13:50:57 | 200 | 5,570 ms | MISS |
| /network.json | 13:51:02 | 200 | 5,438 ms | MISS |
| /api/network-context | 13:51:29 | 200 | 6,423 ms | MISS |
| /network.json | 13:51:35 | 200 | 4,918 ms | MISS |
| /api/network-context | 13:52:01 | 200 | 7,666 ms | MISS |
| Request | Status | Cache | Returned | Content check |
|---|---|---|---|---|
/api/network-context | 200 | MISS | 29 projects: agent-blackbox … vector | — |
/api/network-context?after=apex | 200 | MISS | 26 projects: arcade … vector | different from unpaginated; matches the projects after the cursor |
/api/network-context?after=apex | 200 | HIT | 26 projects: arcade … vector | different from unpaginated; matches the projects after the cursor |
/api/network-context?after=signal-layer | 200 | MISS | 1 projects: vector … vector | different from unpaginated; matches the projects after the cursor |
/api/network-context?after=zzz | 200 | MISS | 0 projects | different from unpaginated; matches the projects after the cursor |
/api/network-context?cursor=apex | 400 | MISS | error: invalid_request | rejected |
/api/network-context?limit=5 | 400 | MISS | error: invalid_request | rejected |