Quality & Release
QA commands
| Command | Purpose |
|---|---|
composer qa | Standard quality gate: validate, audit, package verify, lint, stan, test |
composer qa:max | Extended local bar: qa + coverage threshold check + mutation testing (requires a local coverage driver) |
composer test | Run PHPUnit tests |
composer test:coverage | Run tests with coverage report (Xdebug coverage mode or PCOV) |
composer stan | PHPStan static analysis |
composer lint | PHP syntax lint (src + bin + examples) |
composer mutate | Infection mutation testing (same coverage-driver requirement) |
composer verify:package | Verify package archive is clean |
Package verification checks both the declared export-ignore rules and the contents of a real git archive build.
CI pipeline
GitHub Actions CI runs on every push and PR:
- Quality (PHP 8.3): composer validate, audit, package verify, syntax lint, PHPStan
- Tests (PHP 8.2, 8.3, 8.4): PHPUnit
- Coverage (PHP 8.3): Coverage report + threshold check
- Mutation (PHP 8.3): Infection mutation testing (80% MSI, 85% covered MSI)
Local qa:max and CI scope
composer qa:max extends composer qa with coverage threshold checks and mutation testing. Coverage and mutation still require a local coverage driver.
CI covers the same release areas across parallel jobs, but it is not a byte-for-byte mirror of local qa:max: PHPUnit runs on PHP 8.2, 8.3, and 8.4, while the quality, coverage, and mutation jobs run on PHP 8.3.
Use XDEBUG_MODE=coverage, enable xdebug.mode=coverage, or install PCOV.
Design principles
- Framework-free, explicit, reviewable
- Safe defaults, no magic
- Honest claims only
- No feature theater