Files
slm-design/DRAFT/architecture/validation.md
S. Gromov 691069af8e sync
2026-08-10 09:12:22 +03:00

52 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Проверка SLM
> Граница автоматической проверки и архитектурного ревью SLM.
## Автоматическая проверка
Проект, заявляющий соответствие SLM, сопоставляет физические пути с SLM root, слоями, модулями, Groups, вложенными модулями, публичными фасетами, точками входа `app` и ресурсами `shared`. Такое сопоставление задаётся стайлгайдом или конфигурацией проверки и не изменяет нормативный смысл сущностей.
Каждое правило класса `A` должно быть реализовано проверкой проекта и блокировать её при нарушении. SLM не навязывает конкретный инструмент.
Скрипт `draft-rules.js` проверяет только целостность документов: формат и уникальность кодов, ссылки и наличие тематических упоминаний. Он не проверяет архитектуру приложения.
Актуальный список правил скрипт получает из [канонического реестра](../rules/registry.md).
## Архитектурное ревью
Правила класса `R` проверяются вручную. Статический анализ может обнаружить подозрительный код, но не способен окончательно определить:
- ответственность и её владельца;
- связность ответственности модуля;
- соответствие кода роли слоя;
- необходимость экспортов публичного API;
- область жизни ресурса и достаточность очистки;
- наличие самостоятельной границы у компонента, группы или сегмента.
## Проверка фасетов
Автоматическая проверка сопоставляет публичные пути модуля с фасетами `index`, `client`, `browser` и `server`, запрещает остальные внешние пути и проверяет их runtime-импорты и реэкспорты, включая транзитивные.
Для проверки сред инструмент различает runtime imports, type-only imports и dynamic imports. Окончательное решение о соответствии экспортируемого кода назначению фасета принимается на ревью.
На ревью проверяется:
- экспортирует ли `index` только универсальные типы и runtime-код;
- остаётся ли `client` совместимым с server prerender и browser hydration;
- достигается ли `browser` только через dynamic boundary с отключённым SSR;
- остаётся ли `server` недоступным через `index`, `client` и `browser`;
- существует ли каждый специализированный фасет ради реального потребителя;
- не дублируется ли один runtime-export между фасетами.
Название файла, директива `use client`, tree shaking или локальная проверка `typeof window` сами по себе не доказывают совместимость кода со средой выполнения.
## Проверка слоя domains
На ревью определяется:
- соответствует ли ответственность модуля предметной роли слоя `domains`;
- не разделена ли одна область на соседние модули без самостоятельных владельцев;
- не объединены ли в одном модуле несвязанные предметные области;
- остаются ли страницы, маршруты и UI нескольких предметных ответственностей в `compositions`;
- остаются ли самостоятельные технические сервисы без предметной модели в `infra`.