- 100% coverage mandatory
- No framework, no DB, pure PHP
- Use FrozenClock and in-memory repositories
- Real Doctrine + Redis (Testcontainers via Pest)
- Transaction rollback after each test
- Minimum 90% coverage
- Pest + Symfony client
- Run against full docker-compose stack
- Cover happy path + all error codes from API.md
- Script: tests/load/reserve-seats.js
- Thresholds:
- 95th percentile < 250ms
- Error rate < 0.1%
- No overselling under 5000 VU
- Future: Pact or Spring Cloud Contract for consumers of domain events