actions/checkout is a JS action and needs a node binary on PATH; the
php:8.3-cli-alpine job container doesn't ship one, so checkout was
failing with "node: executable file not found in $PATH".
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Runs the backend test suite against PHP 8.3 for every PR targeting
main, so branch protection can require it to pass before merging.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>