From 6a6ec1b8f8a5c70d21f3772ce637b763e8ab21ea Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 31 Aug 2026 00:15:52 +0900 Subject: feat(plugin): carry Http\Response across as a materialized value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A response is built for one request and the graph never retains it, so there is no entity for a handle to point at. The child holds a real instance instead, revived from the object record the wire carries, and collect() frees the copy each world holds — which is what that method is for. The value-object rule rejects the class only because collect() assigns to $this, so the category comes from an overrides.list entry. HttpDownloader::get() and copy() answer with one. Two gaps stay: decodeJson() reaches Composer\Json\JsonFile, which a guard shadows, and Composer answers a curl request with the CurlResponse subclass where this port flattens the value into a Response. Co-Authored-By: Claude Opus 5 (1M context) --- scripts/plugin-stub-generator/guard-exemptions.list | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'scripts/plugin-stub-generator') diff --git a/scripts/plugin-stub-generator/guard-exemptions.list b/scripts/plugin-stub-generator/guard-exemptions.list index 90adcb20..7ca14fd9 100644 --- a/scripts/plugin-stub-generator/guard-exemptions.list +++ b/scripts/plugin-stub-generator/guard-exemptions.list @@ -12,3 +12,7 @@ Composer\Package\Link # the dual-mode Composer\EventDispatcher\Event (php/runtime/) carries a natively constructed event # to the Rust side as a P-table entity. Composer\Plugin\PreCommandRunEvent + +# The wire codec revives values of this class from the object record serialize() writes for them +# (php/runtime/Shirabe/MaterializedValue.php), so the real declaration has to stay loadable. +Composer\Util\Http\Response -- cgit v1.3.1-4-g156e