* Drop EOL PHP and Laravel versions
Drops support for PHP 8.1 (EOL Dec 2025) and Laravel 9/10/11 (Laravel 11
EOL March 2026). The supported matrix is now PHP 8.2-8.5 and Laravel
12 + 13 (Laravel 13 support is added in the same pass, as it was missing
from the constraints).
- composer.json: php ^8.2-^8.5, illuminate/contracts ^12|^13,
symfony ^7|^8, testbench ^10|^11, pest ^3|^4, phpunit ^11|^12,
collision ^8, and switch abandoned nunomaduro/larastan to
larastan/larastan
- run-tests.yml: matrix PHP 8.2-8.5 x Laravel 12/13 (L13 requires
PHP >= 8.3, so 8.2 is excluded there)
- README: minimum requirements updated
- phpunit.xml.dist: migrated off the deprecated PHPUnit 9 schema
- Fix three tests that relied on scheme-less URLs slipping through
Http::fake() as real requests (rejected by current Guzzle)
- JavascriptSizeCheck: explicit attr() return in each() closure
(PHPStan level 5 with symfony/dom-crawler 8)
Verified green on both matrix corners: Laravel 13.15/PHPUnit 12/Pest 4
(prefer-stable) and Laravel 12/PHPUnit 11/Pest 3 (prefer-lowest), plus
PHPStan.
* Add CanonicalCheck
Checks for a canonical URL (<link rel="canonical">) and verifies it is
not a broken link. Includes translations (en, nl, de, fr, pt_BR), tests
and README entry.
* Add ViewportCheck
Checks for a viewport meta tag containing width=device-width, which is
important for mobile-first indexing. Includes translations (en, nl, de,
fr, pt_BR), tests and README entry.
* Add CharsetCheck
Checks that the page declares a character encoding via <meta charset>
or an http-equiv Content-Type header. Includes translations (en, nl,
de, fr, pt_BR), tests and README entry.