Skip to content

Merge 4.4 into main#8399

Merged
soyuka merged 28 commits into
api-platform:mainfrom
soyuka:mergeup-4.4-into-main
Jul 12, 2026
Merged

Merge 4.4 into main#8399
soyuka merged 28 commits into
api-platform:mainfrom
soyuka:mergeup-4.4-into-main

Conversation

@soyuka

@soyuka soyuka commented Jul 12, 2026

Copy link
Copy Markdown
Member

Routine 4.4→main up-merge. Propagates the recent 4.4 work to 5.0: foo.diff removal (#8395), the Symfony ^7.4 floor bump + E3/E4 cleanups (#8397), the @experimental stabilization (#8398), and the 4.3→4.4 fixes #8389/#8393.

Manual conflict resolutions:

CI validates the serializer suite (the port) + the rest.

wuchen90 and others added 28 commits June 29, 2026 16:45
…m#8371)

* fix(mcp): make tools/list resilient to an empty registry

tools/list reads from the SDK registry, which is populated once, when
mcp.server is built. Under a persistent runtime (e.g. FrankenPHP worker
mode) that single build can capture an empty registry and stay empty for
the whole process, so tools/list returns [] while tools/call keeps
working through the request-time Handler.

Add a ListHandler (tagged mcp.request_handler, so it precedes the SDK's
registry-backed list handlers) that loads API Platform elements into the
registry on first use and reads back through the shared registry, so
runtime registrations and registry decorators are preserved.

Refs api-platform#8370

* Apply suggestions from code review

Co-authored-by: Antoine Bluchet <soyuka@users.noreply.github.com>
# Conflicts:
#	CHANGELOG.md
#	src/State/Provider/DeserializeProvider.php
…olationFactory

api-platform#8389 patched normalizeExpectedTypes() in DeserializeProvider on 4.3; 4.4 moved that logic to DenormalizationViolationFactory. Port the backed-enum backing-type reporting and result dedup so the fix survives the up-merge.
… test

The 3-way merge of api-platform#8389 correctly dropped the deprecation-expectation
guard (imports + #[IgnoreDeprecations] + version check) that api-platform#8287 had
already removed from the sibling test, since 4.4's DenormalizationViolationFactory
prefers getNotNormalizableValueErrors() over the deprecated getErrors()
whenever it exists and so never triggers that deprecation on symfony/serializer
>=8.1. But api-platform#8389 also introduced a brand-new test reusing the same
now-unimported VersionParser/IgnoreDeprecations symbols, which the
textual merge could not reconcile: it left the merged file referencing
classes with no matching use statement. Remove the same stale guard
from the new test for the same reason api-platform#8287 removed it from the old one.
Per the C.4 stabilization decision, @experimental is kept only on MCP
classes. Elasticsearch, the State parameter providers
(Security/IriConverter/ReadLink), PropertyAwareFilterInterface and the
Laravel ParameterValidatorProvider are stable — drop the marker.
Aligns 4.4 with main, which already stripped these.
Symfony 7.4 is the new LTS; bump every symfony/* floor to ^7.4 (|| ^8.0)
across all components and drop 6.4 / 7.0-7.3 support. Also bump the
extra.symfony.require declaration in each composer.json to ^7.4 || ^8.0
to stay consistent with the new floor (read by flex in CI).

Cleanups the floor unblocks:
- ParameterValidatorProvider: drop the getConstraint()/getCause()
  method_exists shims (guaranteed on ConstraintViolationInterface >= 7.2)
- OperationRequestInitiatorTrait: drop a stale TODO
# Conflicts:
#	composer.json
#	src/Doctrine/Common/Filter/PropertyAwareFilterInterface.php
#	src/Doctrine/Odm/composer.json
#	src/Doctrine/Orm/composer.json
#	src/Elasticsearch/composer.json
#	src/GraphQl/composer.json
#	src/Hal/composer.json
#	src/HttpCache/composer.json
#	src/Hydra/composer.json
#	src/JsonApi/composer.json
#	src/JsonSchema/composer.json
#	src/Metadata/composer.json
#	src/OpenApi/composer.json
#	src/RamseyUuid/composer.json
#	src/Serializer/AbstractItemNormalizer.php
#	src/Serializer/composer.json
#	src/Symfony/composer.json
#	src/Validator/composer.json
…etadataFactory

The 4.4 readable-link refinement used a getType-gated dual path; main (5.0)
removed ApiProperty::getBuiltinTypes and property-info's getType, so on the
bumped Symfony floor the legacy branch fatally called an undefined method
during cache warmup (breaking every PHPUnit job). Keep only the native-type
branch, matching main's modern type handling.
…izerTest

The api-platform#8393 nullable denormalization tests guarded on
method_exists(PropertyInfoExtractor::class, 'getType') with an unqualified
class (resolving to the test namespace), so they were always skipped and
PHPStan flagged the call as always-false. With the Symfony ^7.4 floor
native types are guaranteed; drop the guards so the tests actually run.
@soyuka soyuka merged commit 7823146 into api-platform:main Jul 12, 2026
89 of 97 checks passed
@soyuka soyuka mentioned this pull request Jul 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants