Engineering-Qualität
Jeder Push und jeder Pull Request an NextPDF durchläuft build-blockierende CI-Gates für statische Analyse, Coverage geänderter Zeilen, Mutation-Score und die Validierung der getaggten Ausgabe.
Statische Analyse
Abschnitt betitelt „Statische Analyse“Bei jedem Push und Pull Request laufen drei PHPStan-Gates:
| Gate | Bereich | Blockierend |
|---|---|---|
| Level 10 | src/ | Ja |
| Level max (Strict-Profil) | src/ | Ja |
| SARIF-Annotation | src/ | Hinweisend |
Die CI behandelt PHPStan-Level-10-Befunde in src/ als build-blockierend.
Zwei Einstellungen legen die Messlatte über einen Standard-Level-10-Lauf:
treatPhpDocTypesAsCertain— PHPStan behandelt die PHPDoc-Annotation als verbindliche Wahrheit, statt auf den nativen Typ zurückzuweiten; eine einengende Annotation, die dem widerspricht, was die statische Analyse ableiten kann, wird als Befund gemeldet.reportUnmatchedIgnoredErrors— jede Unterdrückung muss einem aktuell gemeldeten Fehler entsprechen, sonst schlägt der Build fehl.
Jeder ignoreErrors-Eintrag für src/ ist an einen PHPStan-Identifier, einen
exakten Dateipfad und, wo relevant, eine exakte Vorkommensanzahl gebunden —
ein neues Vorkommen desselben Identifiers an anderer Stelle oder ein zweites
Vorkommen in derselben Datei lässt den Build fehlschlagen.
Coverage
Abschnitt betitelt „Coverage“Die CI erzwingt eine 90-%-Coverage-Schwelle auf den Zeilen, die ein Pull Request ändert, gemessen mit PCOV gegen den Basis-Branch. Ein Pull Request unterhalb der Schwelle lässt den Build fehlschlagen.
Mutationstests
Abschnitt betitelt „Mutationstests“Mutationstests prüfen, dass die Tests tatsächlich Verhalten absichern: Die CI mutiert den Code und verlangt, dass ein Test fehlschlägt. Drei Mutation-Score-Indikatoren tragen monoton nicht sinkende Untergrenzen:
| Metrik | Erzwungenes Minimum |
|---|---|
raw_msi | 88,9 % |
effective_msi | 89,0 % |
covered_msi | 88,9 % |
Ein Pull Request, der eine Metrik unter ihre Untergrenze drücken würde, wird abgewiesen. Die CI wendet eine dokumentierte Varianztoleranz an, bevor ein Lauf gegen die Untergrenzen verglichen wird.
Ausgabevalidierung
Abschnitt betitelt „Ausgabevalidierung“Die CI führt veraPDF 1.30.1 mit dem Profil pdfua.strict als
build-blockierendes Gate auf dem Korpus der getaggten Ausgabe aus.