Build1 distinct publisher3 min readPublished
Eight PAGI releases landed in five days, and almost none of it reaches application code. What does reach it is two behaviours worth a paragraph each, and both of them delete flags from streaming helpers.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Follow any of these and your For You feed starts watching them — no settings page required.
build
The model swap that cost three days: write the response contract before you pick a provider1 distinct publisher
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
build
Your 90% Cache Hit Ratio Is a Lagging Indicator. Alert on Cold Misses Per Key1 distinct publisher
build
Edge KV puts the permission check an hour behind the Postgres row1 distinct publisher
In PAGI, an awaited send now fails for only one reason: a problem with your event, not with the peer [3]. Bad event shape, wrong sequence, unreadable file: the Future fails, and it fails before the connection closes [7]. A send issued after the connection has already closed stays a successful no-op that neither delivers nor raises [6]. That split is what keeps the upgrade audit narrow.
The gap those releases were closing sits between the two cases. A send Future can be pending because the server is applying backpressure, and the client can disconnect while it sits there [8]. Applications are required to await every send, so a server that left that Future pending forever would deadlock an otherwise conforming application [9]. The spec did not say whether it resolved, failed or was cancelled, nor what connection state you would observe on resumption, which meant every answer a framework invented was legal [10]. Version 0.002006 picks resolve, and pairs it with a pending receive resolving into `http.disconnect`, `websocket.disconnect` or `sse.disconnect` [11][12]. By the time your coroutine resumes from an awaited send, `is_connected()` is false and `disconnect_reason()` is set [13].
The two runtimes disagree about how to handle this, and the disagreement is worth spelling out. ASGI's spec at version 2.4 says a send on a closed connection should raise; uvicorn implemented that, broke deployed FastAPI applications, and reverted, so the dominant ASGI server contradicts its own spec, according to the PAGI writeup [15]. The reason raising looked attractive there is structural: ASGI has no out-of-band connection-state object, so raising from `send()` was the only disconnect channel it had [16]. Kestrel took the other route, silently discarding writes after a disconnect and documenting `RequestAborted` as the thing to observe, which is the role `pagi.connection` plays [17]. TCP settles the argument for me. Writes to a dead peer succeed into kernel buffers for a while whatever your API promised, so a contract of "sends fail when the client is gone" promises something the network will not deliver [18].
Eight releases over five days is 1.6 a day [20], and the whole of it reaches a normal request/response application as two sentences [5]. That ratio reflects specification work rather than feature work. Worth noting where my copy runs out: the guarantee list is followed by a sentence beginning "Servers that implement all of t", and the supplied text stops there [21], so I cannot tell you what conformance claim the post goes on to make.
The provenance is the part I find most persuasive. The clauses came out of a streaming response helper, which grew a flag for a disconnect arriving while inside a send call, then a flag to defer publishing the disconnect until the send settled, and was heading toward a custom Future subclass that tracked whether a failure had been observed yet [19]. A Future subclass that keeps notes on whether anyone has noticed its failure is a sign the spec needs re-reading. The author states it directly: when the fixes start needing philosophy, something upstream is wrong [22].
Ranked by verification strength, evidence, and original report placement.
The PAGI project shipped four spec releases and four server releases in five days, as described in a 2026-08-28 post on dev.to.
The post is dated 2026-08-28 and covers PAGI 0.002006-0.002007 (core spec 0.5 / Www sub-spec 0.4) and PAGI::Server 0.002011.
Awaited sends can now fail if the application's events are malformed or out of sequence; on some paths such events used to be silently ignored.
Applications must always finish their responses: an incomplete response is now loudly abnormal instead of a silent hang.
For a normal request/response application the entire upgrade note is two sentences, and everything else in the post is guarantees inherited without writing a line of code.
A send issued after the connection closed is a successful no-op that neither delivers nor raises; disconnection is detected through the pagi.connection object or the protocol's disconnect event, never by inspecting a send's result.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 29, 2026
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Authoritative on its own spec, single-sourced on everyone else's
Split the claims in two and the picture resolves. When the post says a pending send now resolves, that a receive settles with http.disconnect, or that on_disconnect never fires inside your $send, the author is the person who decides — self-definition is the strongest evidence a spec clause can have. When it says ASGI 2.4 requires a raise, that uvicorn shipped it and broke FastAPI deployments, or that Kestrel's documented contract is RequestAborted, our coverage offers no ASGI text, no uvicorn issue and no Microsoft page to read against it. Add a copy that breaks off inside the streaming example and the demonstration half is unfinished too.
Eight releases, one known user, and it is the author
Shipping is not the same as being used. There are four spec releases, four server releases and a conformance suite run over real sockets on four protocols — all producer-side activity, all from the same hands. The only application named anywhere is the author's own streaming response helper, and it appears as the thing that hurt, not as a deployment. No download counts, no third-party framework on PAGI, nobody quoted running it.
Undersells its own week, oversells the neighbours
Most posts announcing eight releases would tell you they matter; this one tells you your upgrade note is two sentences and prints a hello-world it says is unaffected. That is deliberate deflation, and it earns the negative reading. What pushes back toward zero is the one rhetorical flourish — 'the dominant ASGI server disagrees with its own spec' — a sharp line about someone else's project delivered without the receipts, in a piece otherwise scrupulous about scoping its own claims.
The spec's author explaining why the spec changed
This is the project telling its own story on a developer blogging platform, and the incentive is visible in the structure: reassure existing users that the churn costs them nothing, and position PAGI's out-of-band disconnect signal as the design ASGI could not have and Kestrel already validates. The origin story is candid about internal pain — flags accreting in a helper the author wrote — which cuts against pure promotion. It remains a document with a conclusion to reach.
One clipped post, but about a spec its author controls
Ordinarily a single self-published source would put this lower. It holds around the middle because the claims that matter most — what a pending send does, what a pending receive resolves with, what is_connected() reads after resumption — are true by authorship the moment they are written down, and any reader can check them against the spec. What keeps it from climbing is everything outside PAGI's boundary, plus a text that stops mid-listing before the promised demonstration lands.