Skip to content

[pull] main from TryGhost:main - #1445

Merged
pull[bot] merged 3 commits into
code:mainfrom
TryGhost:main
Aug 26, 2026
Merged

[pull] main from TryGhost:main#1445
pull[bot] merged 3 commits into
code:mainfrom
TryGhost:main

Conversation

@pull

@pull pull Bot commented Aug 26, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

acburdine and others added 3 commits August 26, 2026 00:17
…30298)

ref INC-323

Under sustained load a Ghost site can queue requests for minutes. By the
time a queued request reaches the renderer, the CDN or browser in front
of it has usually timed out and destroyed the socket, but Ghost renders
it anyway: a full template pass plus any {{#get}} queries the template
makes, written to a socket nobody is reading.

That waste is self-reinforcing. It occupies the single event loop, which
lengthens the queue, which causes the next request to time out. In a
recent incident an origin sat pegged at 100% CPU for two hours largely
serving requests its CDN had already abandoned.

The renderer now bails out when the response socket is already
destroyed, checked both before the render starts and after it completes,
since a slow render gives the client plenty of time to leave. The status
is set to 499 (client closed request) so these are distinguishable in
the access log from the phantom 200s they are currently recorded as.

Only sockets Node has already destroyed are skipped, so there is no case
where a client still waiting for a response gets it dropped.
no ref
- using the same tsconfig for both tests and source allowed vitest globals to leak into source code and cause runtime errors
- splitting tsconfig into an explicit test config ensures that missing imports correctly flag type errors
no issue

Gift redemption should keep a personalized gift addressed to its
intended recipient, even when the buyer or another member opens the link
while signed in.

- Preferred the stored recipient name over the signed-in member name
- Retained the member name as a fallback for gifts without a recipient
name
- Added regression coverage for signed-in viewers
@pull pull Bot locked and limited conversation to collaborators Aug 26, 2026
@pull pull Bot added the ⤵️ pull label Aug 26, 2026
@pull
pull Bot merged commit 0186453 into code:main Aug 26, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants