Journal
The quality loop: PHPUnit, Behat, PHPStan, GitLab
A senior PHP project does not wait for staging to find type errors, style wars or a broken checkout path.
PHPUnit holds the domain and the application. Behat holds a few user-visible journeys in Gherkin. PHPStan holds types before runtime. PHP-CS-Fixer holds the shape of the diff. Xdebug is how you see why a red test is red.
GitLab is where that loop becomes automatic: merge request, pipeline, no merge if the gate is red. Docker makes the pipeline’s PHP the same as the laptop’s. Cursor can draft the patch; the pipeline still decides if it ships.