-
v0.1.2
Pre-Releasereleased this
2026-05-03 17:23:35 +00:00 | 19 commits to main since this releaseBugfix release. Bundles the v0.1.1 follow-up that surfaced during the v0.1.2 cycle (bundled-mode supervisor cleanly SIGTERMs its child on host exit) with three non-breaking fixes from a post-v0.1.1 architecture audit.
Fixed
- Bundled supervisor: clean child shutdown.
BackendConnection's destructor was the only path that calledteardownChild(), but it ran during stack unwinding afterapp.exec()returned — by then the Qt event loop was already mid-shutdown andQProcess::waitForFinishedcouldn't reliably reap the child. Symptom: Qt loggedQProcess: Destroyed while process ("...frankenphp") is still running, frankenphp + its PHP workers became orphans. The constructor now also connectsQCoreApplication::aboutToQuit→teardownChild, so the child is SIGTERM'd while the event loop is still active. The bundled-supervisor integration test gained a clean-shutdown assertion (no Qt warning + no orphan frankenphp under the host's PGID after SIGTERM). bridge.qml_pathis now actually configurable. TheBridgeResourceMakerandBridgeWindowMakerdocstrings claimed the QML scaffold path was settable via the bundle'sqml_pathoption, but the bundle'sconfigure()was empty and the constructor default ('../qml/') was the only knob.BridgeBundle::configurenow defines aqml_pathscalar node;loadExtensionexposes it as thebridge.qml_pathcontainer parameter;services.yamlbinds it into both makers. Apps can override withconfig/packages/bridge.yaml:bridge: { qml_path: ../qml/ }. Default unchanged.SessionAuthenticator: problem+json on the entry-point path.onAuthenticationFailurealready returned RFC 7807application/problem+jsonfor bad-token requests, but Symfony's defaultAuthenticationEntryPointInterface::startfired for no-token requests, returning a Form-flavoured 302/401 with the wrong shape for QML'sRestClienterror mapping. The authenticator now implementsAuthenticationEntryPointInterfaceand routes both paths through a sharedproblemJson()helper so QML sees one error shape regardless of which firewall path was taken. New test covers the entry-point response.CorrelationKeyListener::onTerminatesub-request guard.onRequestalready guarded withisMainRequest(), butonTerminatecleared unconditionally — a sub-request finishing mid-controller would wipe the main request's correlation key, causing the matching Mercure echo to lose itscorrelationKeyfield and the optimistic UI to never reconcile. FrankenPHP worker mode does not currently emit sub-requests so the user-visible impact is nil, but the asymmetry was a defensive bug.
Downloads
- Bundled supervisor: clean child shutdown.