v1.4.0 — quality + forward-compat hardening
Quality + forward-compat release. No behavioural changes for callers — focus is hardening of the v1.3.0 surface, static-analysis ratcheting, and closing deferred test gaps.
Highlights
- PHPStan 1.x → 2.x at level 5 with
mglaman/phpstan-drupal(#45) menu.language_tree_manipulatormade optional — no longer hard-depends on the contrib-or-patched service (#43)Resizerreduced to static utility — service registration dropped,Resizer::resizer()called directly (#44)- Deferred kernel coverage closed — remote-video URL extraction, Lottie file path, DisplayBase
__calldelegation, contrib-gated getters behindmarkTestSkipped(#47) - DDEV pinned as canonical local environment — PHP 8.3 matches CI + production;
ddev coveragecustom command bundled - README polish — 6 badges, PORTA caps, Drupal links (#50)
- Brittle entity_reference walker tests removed (#46)
Coverage
53.71% (789 / 1469 lines), measured under PHP 8.3 / DDEV with xdebug coverage driver. MIN_COVERAGE floor unchanged at 53 — v1.4.0 is hardening, not a coverage push. See CHANGELOG.md for the per-class breakdown that seeds v1.5.0 planning.
BC
None. No public-API changes. The only consumer-visible change is the documented Resizer call shape, which was already a static-style call in practice (the service had no state).