Перейти до вмісту

Базова лінія якості

Знято 2026-08-25 на коміті 227d962, одразу після ввімкнення аналізаторів у 0.19.0.

До цього релізу в бекенді не було жодного аналізатора: ні Directory.Build.props, ні .editorconfig для C#, ні SonarAnalyzer/Roslynator. Ввімкнено було тільки Nullable=enable, і його попередження ніхто не рахував. Ці числа — точка відліку, а не мета на завтра.

Гейт не блокує: попередження лишаються попередженнями, CI показує їх у зведенні. Причина в тому, що впровадити аналізатори на 646 файлах і одразу зробити їх помилками означало б спинити роботу.

Бекенд — 652 попередження

Section titled “Бекенд — 652 попередження”
Проєкт Попереджень
tests 248
ProjectK.BusinessLogic 163
ProjectK.API 100
ProjectK.Infrastructure 96
ProjectK.Common 45

За джерелом:

Родина Кількість Що це
CS (компілятор) 232 Nullability — було видно й раніше, просто ніхто не дивився
CA (.NET-аналізатори) 246 Нове
S (Sonar) 158 Нове
RCS (Roslynator) 2 Нове

Найчастіші правила:

Правило Кількість Суть
CS8625 119 null у non-nullable параметр
CS8618 77 Non-nullable поле не ініціалізоване
CA1848 74 Логування без LoggerMessage-делегатів
S8969 46 Sonar
CA1873 40 Дорогий аргумент логування обчислюється завжди
CA1861 23 Константні масиви в аргументах
CA1859 21 Конкретні типи замість інтерфейсів у гарячих шляхах
CA1305 16 Форматування без IFormatProvider
  • CA1707 у тестах — 545 із 546 випадків це імена виду Method_Scenario_Expectation. Це наша конвенція, і вона ховала все інше. У продакшн-коді правило працює.
  • CA2201 і CS8618 у тестах — кидати new Exception із тестового дубля і присвоювати фікстури в setup це норма. Аналізатор підтвердив, що в продакшн-коді жодного throw new Exception немає — ручний аудит, з якого починалась ця сторінка, був точний.
  • CS1591 (відсутній XML-коментар) — окрема задача з документації, не шум у щоденній збірці.

Без цих приглушень було б 1245 — майже вдвічі більше, і 44% становила б одна тестова конвенція.

Фронтенд — 18 попереджень

Section titled “Фронтенд — 18 попереджень”
Правило Кількість
sonarjs/assertions-in-tests 5
sonarjs/no-nested-template-literals 3
sonarjs/void-use 2
sonarjs/no-forced-browser-interaction 2
sonarjs/cognitive-complexity 2
решта поодинці 4

Помилок 0 — лінт проходить.

Що змінилось у налаштуванні

Section titled “Що змінилось у налаштуванні”
  • Додано eslint-plugin-sonarjs; правила з recommended понижено до warn, щоб знахідки були видні, але не валили збірку. Правила, які recommended лишає вимкненими, вимкнені й далі — інакше вмикається понад 900 стилістичних зауважень на кшталт file-header.
  • Зона лінта розширена на e2e/**, який раніше не перевірявся взагалі. Це одразу знайшло невикористаний аргумент у page-title.spec.ts.
  • У spec- і e2e-файлах вимкнено no-duplicate-string, no-identical-functions, no-hardcoded-passwords і prefer-specific-assertions — засіяні креденшели й повтори у фікстурах це суть тестів, а не борг.
Кількість
Бекенд 724
Фронтенд 614
E2E (Playwright) 97

Покриття збиралось і збирається обома боками (coverlet.collector, karma-coverage), але в CI не збиралось і ніде не примусове. Порогів навмисно не ставимо, доки не буде видно реальну цифру.

Бекенд:

Terminal window
dotnet build Backend/ProjectK.Backend/ProjectK.Backend.sln -v q --nologo

Фронтенд:

Terminal window
cd Frontend/projectk-frontend && npx ng lint

Наприкінці 0.19.0 кількість попереджень має впасти, покриття — не впасти.

E2E після всього: 101/101 на перезібраному образі, після двох виправлень у коді (мапа AutoMapper для списку виховників; літерал імені дії, зачеплений перейменуванням) і однієї спеки.

DEBT-06: 165 імен запитів, хендлерів, валідаторів і обробників подій приведено до одного стилю, NamingRules в архітектурних тестах не дає йому розповзтися. DEBT-07: один макет модуля на фронтенді, kebab-case для файлів моделей і функцій, hex-фолбеки в CSS зняті. Обидва — без семантичних змін; 1077 + 664 тести зелені.

dotnet format прогнано по всьому бекенду (file-scoped namespaces, зайві using, пробіли, без BOM; міграції виключено). dotnet format --verify-no-changes --exclude "**/Migrations/**" чистий і стоїть у CI як advisory-крок. Кількість аналізаторних попереджень не змінилась: форматер їх не торкається.

Повторний знімок — 2026-09-11 (після першого ярусу до 1.0)

Section titled “Повторний знімок — 2026-09-11 (після першого ярусу до 1.0)”

Тести: бекенд 1073 (523 · 472 · 69 · 9), фронт 664. dotnet list package --vulnerable --include-transitive — чисто в усіх девʼяти проєктах; npm audit --omit=dev — чисто, dev-ланцюг (karma, browserslist, fast-uri через @angular-devkit) лишається до наступного мажора angular-eslint.

Повторний знімок — 2026-09-11 (main після 0.20.0-beta)

Section titled “Повторний знімок — 2026-09-11 (main після 0.20.0-beta)”

Знято під час аудиту готовності до 1.0, тим самим способом, що й вище.

Було (2026-08-25) Стало
Попереджень бекенду (dotnet build -c Release --no-incremental, унікальних) 652 776
Попереджень фронту (ng lint) 18 18 (0 помилок)
Тестів бекенду 724 1032 (508 + 446 + 69 + 9, після аудитних виправлень)
Тестів фронту 614 652 (два спеки битого register/manager знято)
E2E (Playwright) 97 101

Бекендних попереджень стало більше, а не менше: 0.20.0 додала ~370 файлів (членства, імпорт, реєстр) під тими самими аналізаторами. Найчастіші правила ті самі — CS8625 (143), CA1848 (73), CS8618 (65), S8969 (58), CA1873 (39). Три файли тестів dotnet format позначає як CHARSET (не UTF-8) — див. задачу FMT-01.

Вразливих пакетів у продакшн-проєктах немає (dotnet list package --vulnerable, npm audit --omit=dev). У тестових проєктах — транзитивні SQLitePCLRaw.lib.e_sqlite3 2.1.11 (API.Tests) і MessagePack 2.5.192 (LoadTests); у devDependencies фронту — qs через karma.