mirror of
https://github.com/gromlab-ru/slm-design.git
synced 2026-08-22 07:30:16 +03:00
94 lines
4.3 KiB
Markdown
94 lines
4.3 KiB
Markdown
---
|
||
title: Client и server assembly domain
|
||
status: draft
|
||
normative: true
|
||
---
|
||
|
||
# Client и Server Assembly
|
||
|
||
`client` и `server` создают готовые runtime-specific instances одного domain поверх его business factory и adapters.
|
||
|
||
## Client assembly
|
||
|
||
```text
|
||
domains/{group...}/{domain}/client/
|
||
├── create-{domain}-client-runtime.ts
|
||
└── index.ts
|
||
```
|
||
|
||
```ts
|
||
export const createAuthClientRuntime = (): AuthRuntime => {
|
||
return authFactory({
|
||
phoneAuth: browserPhoneAuthAdapter,
|
||
session: browserSessionAdapter,
|
||
})
|
||
}
|
||
```
|
||
|
||
**SLM-ASM-001 - ОБЯЗАН.** Client assembly может импортировать только собственную business factory, собственные client adapters, собственную React surface и необходимые runtime-specific technical inputs.
|
||
|
||
**SLM-ASM-002 - ОБЯЗАН.** Client assembly должна возвращать готовый runtime собственного domain.
|
||
|
||
**SLM-ASM-003 - ЗАПРЕЩЕНО.** Client assembly одного domain не может импортировать creator или runtime другого domain.
|
||
|
||
**SLM-ASM-004 - МОЖЕТ.** Client assembly может принимать готовую внешнюю capability через собственный input contract.
|
||
|
||
```ts
|
||
createUserClientRuntime({ auth: auth.session })
|
||
```
|
||
|
||
Такой input не даёт user domain права создавать AuthRuntime или импортировать его client entrypoint.
|
||
|
||
## Server assembly
|
||
|
||
```text
|
||
domains/{group...}/{domain}/server/
|
||
├── create-{domain}-server-runtime.ts
|
||
└── index.ts
|
||
```
|
||
|
||
**SLM-ASM-005 - ОБЯЗАН.** Server assembly должна создавать новый runtime в scope, соответствующем request или другой явно выбранной server lifetime.
|
||
|
||
**SLM-ASM-006 - ЗАПРЕЩЕНО.** Request credentials, cookies, headers и user-specific state не могут сохраняться в process-level mutable singleton.
|
||
|
||
**SLM-ASM-007 - ОБЯЗАН.** Framework/request input используется только для создания server adapters и не протекает как raw framework object в business API.
|
||
|
||
**SLM-ASM-008 - ОБЯЗАН.** Server entrypoint должен иметь явный server-only marker, если framework предоставляет такой механизм.
|
||
|
||
**SLM-ASM-015 - МОЖЕТ.** Server assembly может принимать готовую внешнюю capability через собственный input contract на тех же условиях, что и client assembly.
|
||
|
||
**SLM-ASM-016 - ОБЯЗАН.** Server assembly может импортировать только собственную business factory, собственные server adapters и необходимые server technical inputs; импорт React/client surface запрещён.
|
||
|
||
## Constructor и activation
|
||
|
||
Assembly определяет способ создания, но не владеет полным cross-domain graph.
|
||
|
||
**SLM-ASM-009 - ЗАПРЕЩЕНО.** Вызов runtime creator не должен выполнять product request, открывать socket или запускать background resource.
|
||
|
||
```text
|
||
module import
|
||
→ определяет creator
|
||
|
||
creator call
|
||
→ создаёт runtime instance
|
||
|
||
explicit start
|
||
→ запускает resources
|
||
```
|
||
|
||
**SLM-ASM-010 - ОБЯЗАН.** Resources запускает graph owner в выбранном scope согласно [lifecycle rules](../../runtime-and-lifecycle.md).
|
||
|
||
## Public entrypoints
|
||
|
||
**SLM-ASM-011 - ОБЯЗАН.** Client и server assembly должны иметь разные public entrypoints.
|
||
|
||
**SLM-ASM-012 - ЗАПРЕЩЕНО.** Общий domain barrel не может runtime-реэкспортировать одновременно client и server surfaces.
|
||
|
||
## Server/client bridge
|
||
|
||
Client и server runtimes являются разными instances над общей business semantics.
|
||
|
||
**SLM-ASM-013 - ЗАПРЕЩЕНО.** DomainRuntime, functions, Context, store или query client нельзя передавать через serializable server/client boundary.
|
||
|
||
**SLM-ASM-014 - МОЖЕТ.** Server может передать client assembly только serializable business-owned bootstrap data без secrets и mutable runtime objects.
|