From c78d4713688d70a0ef643d5c2dd9e44fea19569b Mon Sep 17 00:00:00 2001 From: magdev Date: Sun, 3 May 2026 16:48:51 +0200 Subject: [PATCH] bridge: scope maker qml_path injection to when@dev MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The v0.1.2 build broke the staging-symfony container compile: explicit top-level `services.PhpQml\Bridge\Maker\BridgeResourceMaker:` blocks forced ResolveClassPass to load AbstractMaker, which is excluded by `composer install --no-dev`. The glob alone tolerates the missing parent (FileLoader silently drops classes that fail class_exists), but explicit blocks bypass that check. Fix: keep v0.1.1's plain glob untouched; move the qml_path argument overrides into a `when@dev:` envelope that prod/no-dev compiles never touch. Dev builds still resolve the bound parameter (verified via debug:container — Argument value `../qml/`); prod cache:clear no longer aborts on missing AbstractMaker; integration-bundled passes end-to-end locally. No public-API change; release CI fix only. Co-Authored-By: Claude Opus 4.7 (1M context) --- framework/php/config/services.yaml | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/framework/php/config/services.yaml b/framework/php/config/services.yaml index 91fd1d3..d387388 100644 --- a/framework/php/config/services.yaml +++ b/framework/php/config/services.yaml @@ -12,10 +12,21 @@ services: arguments: $expectedToken: '%env(default::BRIDGE_TOKEN)%' - PhpQml\Bridge\Maker\BridgeResourceMaker: - arguments: - $qmlPath: '%bridge.qml_path%' +# Maker classes extend symfony/maker-bundle's AbstractMaker, which is a +# require-dev dependency. In `composer install --no-dev` builds (the +# staging-symfony tree the AppImage is assembled from) AbstractMaker is +# absent: PHP fails to autoload BridgeResourceMaker etc., so the glob +# above silently drops them — that's fine. But a top-level explicit +# `services.PhpQml\Bridge\Maker\BridgeResourceMaker:` block forces +# ResolveClassPass to load the class regardless of dev/prod, which then +# crashes the prod container compile. Scope the qml_path injection to +# `when@dev:` so prod builds never touch these definitions. +when@dev: + services: + PhpQml\Bridge\Maker\BridgeResourceMaker: + arguments: + $qmlPath: '%bridge.qml_path%' - PhpQml\Bridge\Maker\BridgeWindowMaker: - arguments: - $qmlPath: '%bridge.qml_path%' + PhpQml\Bridge\Maker\BridgeWindowMaker: + arguments: + $qmlPath: '%bridge.qml_path%'