4.0 KiB
Purpose
Гарантирует, что frontend сохраняет проверяемые structural, startup-size и test-coverage свойства при последующих изменениях React client.
ADDED Requirements
Requirement: Frontend сохраняет structural boundaries slice public API
Frontend MUST не содержать cycles в import graph src и MUST обращаться к
другому FSD slice только через его public index.ts, независимо от слоя,
включая app и test source. Generated source MAY быть исключён только при
документированном вынужденном исключении в dependency configuration.
Scenario: Добавлен import cycle
- WHEN исходный или test module в
srcсоздаёт прямой либо косвенный import cycle - THEN documented frontend dependency gate завершается с ошибкой до передачи изменения
Scenario: Slice обходит public API другого slice
- WHEN module одного slice импортирует внутренний file другого slice,
минуя его public
index.ts - THEN documented frontend dependency gate завершается с ошибкой и сообщает boundary violation
Scenario: Application использует public route API
- WHEN application container использует route-level component
- THEN import проходит через public API routes slice и dependency gate завершается успешно при отсутствии остальных violations
Requirement: Frontend ограничивает initial JavaScript payload
Production frontend MUST lazy-load route page boundaries. Сумма minified JavaScript entry bundle и всех его eagerly loaded JavaScript dependencies MUST NOT превышать 500 kB. Lazy route chunks MUST иметь зафиксированный baseline для последующих регрессий; bundle policy MUST NOT требовать ручного vendor chunking.
Scenario: Production build укладывается в initial budget
- WHEN frontend production build создаёт entry bundle и eagerly loaded JavaScript dependencies суммарным размером не более 500 kB minified
- THEN documented bundle gate завершается успешно
Scenario: Production build превышает initial budget
- WHEN frontend production build создаёт entry bundle и eagerly loaded JavaScript dependencies суммарным размером более 500 kB minified
- THEN documented bundle gate завершается с ошибкой и сообщает measured initial payload
Scenario: Изменён lazy route chunk
- WHEN lazy-loaded route chunk превышает свой зафиксированный baseline
- THEN documented bundle gate завершается с ошибкой до передачи изменения
Requirement: Frontend coverage является anti-regression gate
Documented frontend coverage command MUST завершаться с ошибкой, если global coverage committed source ниже 82% statements, 75% branches, 75% functions или 83% lines. Эти пороги SHALL служить только сигналом регрессии и MUST NOT заменять scenario-based tests.
Scenario: Coverage сохраняет каждый baseline floor
- WHEN frontend test suite достигает либо превышает все четыре coverage floors
- THEN documented coverage command завершается успешно
Scenario: Coverage опускается ниже floor
- WHEN frontend test suite опускается ниже хотя бы одного coverage floor
- THEN documented coverage command завершается с ошибкой по этой метрике