Инженерное качество
Каждый push и pull request в NextPDF проходит блокирующие сборку CI-гейты: статический анализ, покрытие изменённых строк, мутационный балл и валидацию тегированного вывода.
Статический анализ
Заголовок раздела «Статический анализ»На каждом push и pull request выполняются три гейта PHPStan:
| Гейт | Область | Блокирующий |
|---|---|---|
| Level 10 | src/ | Да |
| Level max (строгий профиль) | src/ | Да |
| SARIF-аннотация | src/ | Консультативный |
CI считает находки PHPStan Level 10 в src/ блокирующими сборку. Две настройки
поднимают планку выше запуска Level 10 по умолчанию:
treatPhpDocTypesAsCertain— PHPStan доверяет аннотации PHPDoc как истине, вместо того чтобы заново расширять её до нативного типа, поэтому сужающая аннотация, противоречащая тому, что может вывести статический анализ, становится репортуемой находкой.reportUnmatchedIgnoredErrors— каждое подавление обязано соответствовать реально репортуемой в данный момент ошибке, иначе сборка падает.
Каждая запись ignoreErrors для src/ закреплена за идентификатором PHPStan,
точным путём к файлу и, где уместно, точным числом вхождений — новое вхождение того
же идентификатора в любом другом месте или второе вхождение в том же файле роняет
сборку.
Покрытие
Заголовок раздела «Покрытие»CI применяет порог покрытия 90% на строках, изменяемых каждым pull request, с измерением через PCOV относительно базовой ветки. Pull request ниже порога роняет сборку.
Мутационное тестирование
Заголовок раздела «Мутационное тестирование»Мутационное тестирование проверяет, что тесты действительно делают утверждения о поведении: CI мутирует код и требует, чтобы тест упал. Три показателя мутационного балла несут монотонно неубывающие нижние пороги:
| Метрика | Принудительный минимум |
|---|---|
raw_msi | 88.9% |
effective_msi | 89.0% |
covered_msi | 88.9% |
Pull request, который опустил бы любую метрику ниже её порога, отклоняется. Перед сравнением запуска с порогами CI применяет задокументированный допуск на разброс.
Валидация вывода
Заголовок раздела «Валидация вывода»CI запускает veraPDF 1.30.1 с профилем pdfua.strict как блокирующий сборку гейт на
корпусе тегированного вывода.