Engineeringkwaliteit
Elke push en pull request naar NextPDF draait build-blokkerende CI-gates voor statische analyse, dekking van gewijzigde regels, mutatiescore en validatie van getagde output.
Statische analyse
Sectie met titel “Statische analyse”Bij elke push en pull request draaien drie PHPStan-gates:
| Gate | Scope | Blokkerend |
|---|---|---|
| Level 10 | src/ | Ja |
| Level max (strict-profiel) | src/ | Ja |
| SARIF-annotatie | src/ | Adviserend |
CI behandelt PHPStan Level 10-bevindingen in src/ als build-blokkerend. Twee
instellingen leggen de lat hoger dan een standaard Level 10-run:
treatPhpDocTypesAsCertain— PHPStan vertrouwt de PHPDoc-annotatie als grondwaarheid in plaats van terug te verbreden naar het native type, zodat een vernauwende annotatie die tegenspreekt wat statische analyse kan afleiden, als bevinding wordt gerapporteerd.reportUnmatchedIgnoredErrors— elke onderdrukking moet overeenkomen met een op dat moment gerapporteerde fout, anders faalt de build.
Elk ignoreErrors-item voor src/ is vastgepind op een PHPStan-identifier, een
exact bestandspad en waar relevant een exact aantal voorkomens — een nieuw
voorkomen van dezelfde identifier elders, of een tweede voorkomen in hetzelfde
bestand, laat de build falen.
Dekking
Sectie met titel “Dekking”CI dwingt een dekkingsdrempel van 90% af op de regels die elke pull request wijzigt, gemeten met PCOV ten opzichte van de basisbranch. Een pull request onder de drempel laat de build falen.
Mutatietesten
Sectie met titel “Mutatietesten”Mutatietesten controleren of de tests op gedrag asserteren: CI muteert de code en vereist dat een test faalt. Drie mutatiescore-indicatoren dragen monotoon niet-dalende ondergrenzen:
| Metriek | Afgedwongen minimum |
|---|---|
raw_msi | 88,9% |
effective_msi | 89,0% |
covered_msi | 88,9% |
Een pull request die een metriek onder zijn ondergrens zou laten zakken, wordt geweigerd. CI past een gedocumenteerde variantietolerantie toe voordat een run met de ondergrenzen wordt vergeleken.
Outputvalidatie
Sectie met titel “Outputvalidatie”CI draait veraPDF 1.30.1 met het pdfua.strict-profiel als build-blokkerende
gate op het corpus van getagde output.