Files
slm-design/DRAFT/rules/level-3.md

98 lines
4.8 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 третьего уровня
Проект Level 3 соблюдает правила Levels 1-2, кроме заменённого `SLM-L2-DOMAIN-R001` и расширенного состава Groups внутри слоя `domains`, и дополнительные правила этого реестра.
## Граница Domain
### SLM-L3-DOMAIN-R001
> **Предметная граница Domain**
>
> Каждая самостоятельная предметная область слоя `domains` представлена ровно одним Domain; его role modules относятся только к этой области.
### SLM-L3-DOMAIN-A002
> **Корень Domain**
>
> Корень Domain не содержит файлов реализации, изменяемого состояния, ресурсов жизненного цикла, публичного API или реэкспортов и содержит только допустимые role modules и Groups.
## Business и factory
### SLM-L3-BUSINESS-R003
> **Business contract Domain**
>
> Каждый Domain содержит ровно один module `business`, который определяет публичные business scenarios, business contracts, domain errors и семантику domain state.
### SLM-L3-BUSINESS-A004
> **Изоморфный graph business**
>
> Production import graph, достижимый из public entrypoint `business`, не достигает framework code, environment boundary, platform API, concrete runtime, adapter, preset или framework module.
### SLM-L3-FACTORY-R005
> **Contract factory**
>
> Business factory получает полный набор собственных ports и создаёт стабильный business API независимо от execution environment; среда не выражается через mode, optional port или метод, намеренно недоступный в части сред.
### SLM-L3-FACTORY-R006
> **Создание API instance**
>
> Вызов business factory не выполняет ввод-вывод, не читает скрытое окружение, не запускает ресурс жизненного цикла, не выбирает concrete adapter и не выполняет framework lifecycle.
### SLM-L3-PORT-R007
> **Business-owned port**
>
> Каждая runtime capability, вызываемая business, описывается минимальным business-owned port, public contract которого не раскрывает concrete runtime, framework или environment types.
## Assembly
### SLM-L3-ADAPTER-R008
> **Ответственность adapter**
>
> Adapter преобразует concrete runtime в business port и не определяет business invariant, domain fallback или domain error.
### SLM-L3-PRESET-R009
> **Роль preset**
>
> Preset module собирает business API для одного именованного execution context выбором implementations ports и не изменяет business contract или scenarios.
### SLM-L3-ASSEMBLY-R010
> **Исполнение lifecycle contract**
>
> Graph owner удерживает API instance только в scope, объявленном module-владельцем, и вызывает предоставленные ему lifecycle operations; module-владелец определяет lifecycle contract resource по правилам Level 1.
## Междоменные и environment зависимости
### SLM-L3-DEPENDENCY-R011
> **Междоменная runtime-граница**
>
> Business одного Domain не создаёт и не импортирует runtime API другого Domain; необходимая capability описывается собственным port и передаётся graph owner при assembly.
### SLM-L3-ENVIRONMENT-A012
> **Environment import graph**
>
> Public entrypoint, обозначенный как client-only, server-only или isomorphic, не импортирует и не реэкспортирует transitive graph несовместимой среды выполнения.
## Framework и verification
### SLM-L3-FRAMEWORK-R013
> **Framework module Domain**
>
> Framework-specific code находится в module Domain, названном именем framework, получает готовый business API и не реализует business decisions или concrete adapters.
### SLM-L3-TEST-R014
> **Проверка business contract**
>
> Каждый public business scenario проверяется factory-level tests с controlled implementations ports; primary tests adapter, preset и framework module проверяют их собственную границу и не дублируют scenario matrix business.