Skip to content

phpdocumentor/reflection-docblock "^5.3.0 || ^6.0.0" causes downstream install failures with spatie/laravel-data on PHP 8.4 #25

Description

@ManukMinasyan

Summary

The current constraint "phpdocumentor/reflection-docblock": "^5.3.0 || ^6.0.0" (added in 0.8.6, see #23) causes composer to lock docblock at v6, which then conflicts with most other PHP ecosystem packages that pull phpdocumentor/reflection and consequently makes installs fail with a misleading error message.

Reproduction

composer create-project laravel/laravel:^12 my-app
cd my-app
composer require --dev pestphp/pest pestphp/pest-plugin-arch -W
# … now phpdocumentor/reflection-docblock is locked at 6.0.3 …
composer require any-package-that-depends-on-phpdocumentor/reflection

Last step fails with:

phpdocumentor/reflection 6.0.0 requires php 8.1.*|8.2.*|8.3.* -> your php version (8.4.20) does not satisfy that requirement.
phpdocumentor/reflection[6.1.0, ..., 6.6.0] require phpdocumentor/reflection-docblock ^5
  -> found phpdocumentor/reflection-docblock[5.0.0, ..., 5.6.7]
  but the package is fixed to 6.0.3 (lock file version) by a partial update.

Why this happens

When both major versions are listed with ||, composer picks the highest available (6.0.3). But:

  • phpdocumentor/reflection 6.1+ (which is what most consumers actually need on PHP 8.4) requires phpdocumentor/reflection-docblock: ^5 — incompatible with the locked v6.
  • phpdocumentor/reflection 6.0.0 accepts docblock v6 but is itself unusable on PHP 8.4 (php: 8.1.*|8.2.*|8.3.*).

So the ^6.0.0 half of your || ends up wedging the whole graph for any PHP 8.4 user who installs pest-plugin-arch before adding any other package that depends on phpdocumentor/reflection.

Ecosystem context

  • Symfony 6.4.32 explicitly rejects docblock v6 at runtime (https://symfony.com/blog/symfony-6-4-32-released).
  • phpdocumentor/reflection 6.1+ (the rest of the phpDocumentor stack) requires docblock ^5.
  • I'm not aware of any other widely-used PHP package that requires or even allows docblock v6.

In effect, ta-tikoma/phpunit-architecture-test 0.8.6+ is the only mainstream package keeping docblock v6 alive in users' lock files, and that's now actively breaking other installs.

Proposed fix

Drop the ^6.0.0 half:

-  "phpdocumentor/reflection-docblock": "^5.3.0 || ^6.0.0"
+  "phpdocumentor/reflection-docblock": "^5.3.0"

If there's a specific 0.8.6 feature that genuinely requires docblock v6, please document it here — but the closing comment on #23 ("added in 0.8.6") doesn't mention any. If v6 was added defensively rather than because it was needed, dropping it back to ^5.3.0 would unblock a meaningful slice of the PHP 8.4 + Pest + Filament + Spatie ecosystem.

Happy to send a PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions