Bumping a PHP monorepo to 8.5: the mechanics
Sixty-seven packages, one CI matrix, one PHPStan target. What it takes to actually move the floor.
Sixty-seven packages, one CI matrix, one PHPStan target. What it takes to actually move the floor.
An upgrade is also a decision about what not to use. Property hooks, the pipe operator, and an array_find pass we mostly rejected.
Three deprecation categories. Twenty-nine call sites. A test corpus that surfaces them all.
How to turn a spec drift detector from a script nobody runs into a hard gate across your task runner, git hooks, and CI pipeline.