FrankenPHP 1.12.7 shipped on 7 August, addressing five bugs and one documentation gap.

The main fix covers classic, non-worker mode. Previously, any output written after a script called fastcgi_finish_request() or frankenphp_finish_request() vanished without warning. Because ignore_user_abort defaults to on, the runtime treated a later echo as proof the client had disconnected, then stopped the script partway through. Kévin Dunglas closed this in pull request #2569, resolving issue #2548.

First-time contributor @ousamabenyounes tackled a metrics bug: frankenphp_total_threads kept accumulating rather than reporting the live thread count, so the number climbed indefinitely. It now behaves as a proper gauge (#2550, fixes #2481).

@AlliBalliBaba pulled the opcache-invalidation restart hook back out. Triggering a restart on every opcache reset risked runaway recursive restarts in frameworks that invalidate their cache often (#2564).

Dunglas also lowered the log level for routine client-disconnect write and flush errors, from warn to debug, aligning FrankenPHP with how Caddy and Mercure already handle these events. The messages no longer carry the incorrect "not a flusher" label (#2589).

On the build side, @henderkes updated go.sh to respect the PHP_CONFIG environment variable (#2557). The documentation gained an explanation of why the wait after a forced kill must remain unbounded (#2577).

See the full changelog from v1.12.6 to v1.12.7 on GitHub.