Quality & Release
QA commands
| Command | Purpose |
|---|---|
composer qa | Standard quality gate: validate, audit, package verify, lint, stan, test |
composer qa:max | Maximum quality bar: all of qa + coverage + mutation testing |
composer test | Run PHPUnit tests |
composer test:coverage | Run tests with coverage report |
composer stan | PHPStan static analysis |
composer lint | PHP syntax lint (src + bin + examples) |
composer mutate | Infection mutation testing |
composer verify:package | Verify package archive is clean |
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.1, 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)
qa:max vs CI equivalence
composer qa:max runs locally: validate, audit, package verify, syntax lint, PHPStan, coverage with threshold, mutation testing.
CI runs the same checks split across parallel jobs. The CI quality job includes lint+stan (matching the quality half of qa:max). Coverage and mutation run in separate CI jobs. The commands are identical.
Design principles
- Framework-free, explicit, reviewable
- Safe defaults, no magic
- Honest claims only
- No feature theater