Дата: 2025-11-10
Версия: 1.0.0
Принцип: Lego + Матрешка - от простого к сложному
┌─────────────────────────────────────────────────────────────┐
│ ИЕРАРХИЯ КОМПОЗИЦИИ (снизу вверх) │
├─────────────────────────────────────────────────────────────┤
│ │
│ Уровень 0: ЭЛЕМЕНТЫ (атомы) │
│ ├── Entity Types (User, Product, Order) │
│ ├── Field Types (String, Integer, Email, DateTime) │
│ ├── Validators (unique, required, format) │
│ └── Actions (create, read, update, delete) │
│ │
│ Уровень 1: МОДУЛИ (молекулы) │
│ ├── AuthModule │
│ ├── ProductCatalogModule │
│ ├── OrderManagementModule │
│ └── PaymentModule │
│ │
│ Уровень 2: КОМПОНЕНТЫ (органеллы) │
│ ├── EcommerceComponent (модули + настройки) │
│ │ ├── ProductCatalogModule (клон #1) │
│ │ ├── OrderManagementModule (клон #1) │
│ │ └── PaymentModule │
│ └── MarketplaceComponent │
│ ├── ProductCatalogModule (клон #2) ← изолирован! │
│ └── MultiVendorModule │
│ │
│ Уровень 3: ВЫСОКОУРОВНЕВЫЕ КОМПОНЕНТЫ (органы) │
│ └── SalesSystemComponent │
│ ├── EcommerceComponent (внутри) │
│ ├── MarketplaceComponent (внутри) │
│ └── AnalyticsComponent │
│ │
│ Уровень 4: КОНФИГУРАЦИЯ (организм) │
│ └── platform.config.yaml │
│ ├── SalesSystemComponent │
│ ├── CRMSystemComponent │
│ └── WarehouseSystemComponent │
│ │
└─────────────────────────────────────────────────────────────┘
Элементы - это самые базовые концепции, из которых строится ВСЁ остальное.
# elements/entities/user.entity.yaml
element_type: entity
name: User
description: "Пользователь системы"
base_fields:
- id: {type: uuid, primary_key: true}
- created_at: {type: datetime, auto_now_add: true}
- updated_at: {type: datetime, auto_now: true}
behaviors:
- timestampable
- soft_deletable
- versionable
# elements/fields/email.field.yaml
element_type: field
name: EmailField
base_type: string
constraints:
- type: format
value: email
- type: max_length
value: 255
- type: required
value: true
validators:
- EmailValidator
- UniqueValidator
ui_widget: email_input
db_index: true
# elements/validators/email_validator.yaml
element_type: validator
name: EmailValidator
pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
error_message: "Invalid email format"
# elements/actions/crud.yaml
element_type: action_set
name: CRUDActions
actions:
- name: create
http_method: POST
permissions: [create]
- name: read
http_method: GET
permissions: [read]
- name: update
http_method: PUT
permissions: [update]
- name: delete
http_method: DELETE
permissions: [delete]
Модуль - это законченный функциональный блок, который решает конкретную задачу.
# modules/auth/auth_module.yaml
module:
name: AuthModule
version: 1.0.0
description: "Аутентификация и авторизация"
# Элементы, которые использует модуль
uses_elements:
entities:
- User
- Role
- Permission
fields:
- EmailField
- PasswordField
- TokenField
validators:
- EmailValidator
- PasswordStrengthValidator
# Определения сущностей модуля
entities:
User:
extends: elements.entities.User
fields:
email: EmailField
password: PasswordField
roles: {type: relation, target: Role, many: true}
Role:
fields:
name: {type: string, unique: true}
permissions: {type: relation, target: Permission, many: true}
Permission:
fields:
name: {type: string, unique: true}
resource: {type: string}
action: {type: enum, values: [create, read, update, delete]}
# API endpoints модуля
api:
endpoints:
- path: /auth/register
method: POST
handler: AuthModule.register_user
- path: /auth/login
method: POST
handler: AuthModule.login_user
- path: /auth/logout
method: POST
handler: AuthModule.logout_user
auth_required: true
# Конфигурация по умолчанию (можно переопределить)
config:
jwt_secret: "${ENV:JWT_SECRET}"
jwt_expiration: 3600
password_min_length: 8
allow_registration: true
email_verification_required: false
# Зависимости от других модулей
dependencies:
- EmailModule # для отправки писем подтверждения (опционально)
# Hooks (точки расширения)
hooks:
before_register: []
after_login: []
on_password_reset: []
# component_ecommerce.yaml
components:
ecommerce:
uses_modules:
# Клон #1 ProductCatalog
main_catalog:
module: ProductCatalogModule
config:
allow_reviews: true
default_currency: RUB
max_images_per_product: 10
# component_marketplace.yaml
components:
marketplace:
uses_modules:
# Клон #2 ProductCatalog (ИЗОЛИРОВАН от клона #1!)
vendor_catalog:
module: ProductCatalogModule
config:
allow_reviews: false
default_currency: USD
max_images_per_product: 5
require_vendor_approval: true
Результат:
- Два экземпляра ProductCatalogModule
- Разные настройки
- Разные БД таблицы (ecommerce_products, marketplace_products)
- Полная изоляция данных
Компонент - это набор модулей с настройками, которые работают вместе для решения бизнес-задачи.
# components/ecommerce/ecommerce_component.yaml
component:
name: EcommerceComponent
version: 1.0.0
description: "Интернет-магазин (B2C)"
# Модули внутри компонента (с клонированием)
modules:
# Модуль аутентификации
auth:
source: AuthModule
config:
allow_registration: true
email_verification_required: true
# Модуль каталога продуктов
catalog:
source: ProductCatalogModule
config:
allow_reviews: true
enable_wishlist: true
default_currency: RUB
# Модуль корзины
cart:
source: ShoppingCartModule
config:
cart_expiration_days: 30
max_items_per_cart: 100
# Модуль заказов
orders:
source: OrderManagementModule
config:
order_statuses: [pending, processing, shipped, delivered, cancelled]
auto_cancel_after_days: 7
# Модуль платежей
payments:
source: PaymentModule
config:
providers: [stripe, paypal]
default_currency: RUB
# Связи между модулями (интеграция)
integrations:
# Корзина → Заказы
- from: cart
to: orders
type: data_flow
events:
- cart.checkout → orders.create_order
# Заказы → Платежи
- from: orders
to: payments
type: data_flow
events:
- orders.created → payments.create_payment
- payments.completed → orders.mark_as_paid
# Общая конфигурация компонента
config:
name: "My Online Store"
timezone: Europe/Moscow
locale: ru_RU
# UI страницы компонента
pages:
- path: /
component: HomePage
uses_modules: [catalog]
- path: /products/{id}
component: ProductDetailPage
uses_modules: [catalog, cart]
- path: /cart
component: CartPage
uses_modules: [cart, auth]
- path: /checkout
component: CheckoutPage
uses_modules: [cart, orders, payments]
auth_required: true
Высокоуровневый компонент - это компонент, который включает в себя другие компоненты + добавляет свою логику.
# components/sales_system/sales_system_component.yaml
component:
name: SalesSystemComponent
version: 1.0.0
description: "Полная система продаж (B2C + B2B + Marketplace)"
# Включает другие компоненты
includes_components:
# B2C интернет-магазин
b2c_store:
source: EcommerceComponent
config:
name: "Retail Store"
allow_guest_checkout: true
# B2B оптовая торговля
b2b_wholesale:
source: EcommerceComponent # Тот же компонент, но другая конфигурация!
config:
name: "Wholesale Portal"
allow_guest_checkout: false
require_company_verification: true
enable_bulk_pricing: true
# Marketplace (многопользовательский)
marketplace:
source: MarketplaceComponent
config:
name: "Vendor Marketplace"
vendor_commission_percent: 15
require_vendor_approval: true
# Дополнительные модули (общие для всех подкомпонентов)
shared_modules:
# Единая аналитика для всех каналов продаж
analytics:
source: AnalyticsModule
config:
track_sources: [b2c_store, b2b_wholesale, marketplace]
# Единый склад для всех каналов
warehouse:
source: WarehouseModule
config:
sync_inventory: true
reserve_stock_on_order: true
# Интеграции между подкомпонентами
cross_component_integrations:
# Синхронизация товаров между каналами
- from: b2c_store.catalog
to: marketplace.catalog
type: sync
mode: one_way
# Общий учет остатков
- components: [b2c_store, b2b_wholesale, marketplace]
shared_resource: warehouse
sync_field: product.stock
# Dashboard для управления всей системой
admin_dashboard:
sections:
- name: "B2C Sales"
component: b2c_store
- name: "B2B Sales"
component: b2b_wholesale
- name: "Marketplace"
component: marketplace
- name: "Analytics"
module: analytics
- name: "Warehouse"
module: warehouse
┌─────────────────────────────────────────────────────────┐
│ SalesSystemComponent │
│ ┌───────────────────────────────────────────────────┐ │
│ │ EcommerceComponent (B2C) │ │
│ │ ┌─────────────┐ ┌────────────┐ ┌─────────────┐ │ │
│ │ │AuthModule │ │CatalogModule│ │OrderModule │ │ │
│ │ └─────────────┘ └────────────┘ └─────────────┘ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ EcommerceComponent (B2B) - клон с другими settings│ │
│ │ ┌─────────────┐ ┌────────────┐ ┌─────────────┐ │ │
│ │ │AuthModule │ │CatalogModule│ │OrderModule │ │ │
│ │ └─────────────┘ └────────────┘ └─────────────┘ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ MarketplaceComponent │ │
│ │ ┌─────────────┐ ┌────────────┐ ┌─────────────┐ │ │
│ │ │VendorModule │ │CatalogModule│ │OrderModule │ │ │
│ │ └─────────────┘ └────────────┘ └─────────────┘ │ │
│ └───────────────────────────────────────────────────┘ │
│ │
│ Shared: ┌──────────────┐ ┌──────────────┐ │
│ │AnalyticsModule│ │WarehouseModule│ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
Конфигурация - это самый верхний уровень, где собирается ВСЯ платформа целиком.
# platform.config.yaml
platform:
name: "CIFRA PLATFORM"
version: 1.0.0
# Глобальные настройки
global_config:
database:
host: localhost
port: 5432
name: cifra_platform
cache:
backend: redis
host: localhost
port: 6379
auth:
jwt_secret: "${ENV:JWT_SECRET}"
session_timeout: 3600
# Активированные компоненты на платформе
components:
# Система продаж
sales_system:
source: SalesSystemComponent
enabled: true
subdomain: sales
database_prefix: sales_
# CRM система
crm_system:
source: CRMSystemComponent
enabled: true
subdomain: crm
database_prefix: crm_
# Складская система
warehouse_system:
source: WarehouseSystemComponent
enabled: true
subdomain: warehouse
database_prefix: warehouse_
# HR система
hr_system:
source: HRSystemComponent
enabled: false # Отключена, но может быть включена
subdomain: hr
database_prefix: hr_
# Кросс-компонентные интеграции
platform_integrations:
# Общая аутентификация для всех компонентов
- type: shared_auth
provider: sales_system.auth
consumers: [crm_system, warehouse_system]
# Синхронизация данных клиентов
- type: data_sync
source: crm_system.customers
targets:
- sales_system.b2c_store.users
- sales_system.b2b_wholesale.users
mode: bidirectional
# Синхронизация складских остатков
- type: data_sync
source: warehouse_system.inventory
targets:
- sales_system.warehouse
mode: real_time
# Центральная админ-панель
admin_portal:
path: /admin
auth_required: true
permissions: [platform_admin]
sections:
- name: "Sales"
component: sales_system
icon: shopping-cart
- name: "CRM"
component: crm_system
icon: users
- name: "Warehouse"
component: warehouse_system
icon: warehouse
- name: "Platform Settings"
type: platform_config
icon: settings
# Мониторинг и логирование
monitoring:
enabled: true
services:
- prometheus
- grafana
- loki
alerts:
- type: service_down
notify: [email, slack]
- type: high_error_rate
threshold: 5%
notify: [slack]
# Backup стратегия
backup:
enabled: true
schedule: "0 2 * * *" # Каждый день в 2:00
retention_days: 30
storage: s3
# Deployment настройки
deployment:
environment: production
replicas: 3
auto_scaling:
enabled: true
min_replicas: 3
max_replicas: 10
cpu_threshold: 70
PLATFORM.CONFIG.YAML
┌────────────────────────────────────────────────────────┐
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ SalesSystemComponent │ │
│ │ ├─ EcommerceComponent (B2C) │ │
│ │ │ ├─ AuthModule │ │
│ │ │ ├─ ProductCatalogModule │ │
│ │ │ ├─ ShoppingCartModule │ │
│ │ │ ├─ OrderManagementModule │ │
│ │ │ └─ PaymentModule │ │
│ │ │ │ │
│ │ ├─ EcommerceComponent (B2B) [clone] │ │
│ │ │ └─ [same modules, different config] │ │
│ │ │ │ │
│ │ └─ MarketplaceComponent │ │
│ │ ├─ VendorModule │ │
│ │ └─ [other modules] │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ CRMSystemComponent │ │
│ │ ├─ ContactManagementModule │ │
│ │ ├─ LeadManagementModule │ │
│ │ ├─ DealPipelineModule │ │
│ │ └─ EmailCampaignModule │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ WarehouseSystemComponent │ │
│ │ ├─ InventoryModule │ │
│ │ ├─ ShipmentModule │ │
│ │ └─ LocationModule │ │
│ └──────────────────────────────────────────────────┘ │
│ │
│ Platform Services: │
│ ├─ Shared Auth │
│ ├─ Data Sync Engine │
│ ├─ Monitoring (Prometheus/Grafana) │
│ ├─ Backup Service │
│ └─ Admin Portal │
└────────────────────────────────────────────────────────┘
Вопрос: Что происходит, когда ProductCatalogModule используется в двух разных компонентах?
Ответ: Создаются изолированные клоны модуля.
# Компонент 1: Ecommerce
component:
name: Ecommerce
modules:
catalog:
source: ProductCatalogModule
instance_id: ecommerce_catalog # Уникальный ID
config:
allow_reviews: true
# Результат:
# - DB tables: ecommerce_catalog_products, ecommerce_catalog_categories
# - API: /ecommerce/catalog/products
# - Полностью изолированные данные
---
# Компонент 2: Marketplace
component:
name: Marketplace
modules:
vendor_catalog:
source: ProductCatalogModule
instance_id: marketplace_catalog # Другой уникальный ID
config:
allow_reviews: false
require_vendor_approval: true
# Результат:
# - DB tables: marketplace_catalog_products, marketplace_catalog_categories
# - API: /marketplace/catalog/products
# - Полностью изолированные данные (НЕ пересекаются с Ecommerce!)
# Platform Core - создание изолированного экземпляра модуля
class ModuleInstance:
def __init__(self, module_class, component_name, instance_id, config):
self.module_class = module_class
self.component_name = component_name
self.instance_id = instance_id
self.config = config
# Генерируем уникальные имена для изоляции
self.db_prefix = f"{component_name}_{instance_id}_"
self.api_prefix = f"/{component_name}/{instance_id}"
self.cache_prefix = f"{component_name}:{instance_id}:"
def instantiate(self):
"""Создает изолированный экземпляр модуля"""
return self.module_class(
db_prefix=self.db_prefix,
api_prefix=self.api_prefix,
cache_prefix=self.cache_prefix,
config=self.config
)
# Пример: создание двух изолированных каталогов
ecommerce_catalog = ModuleInstance(
module_class=ProductCatalogModule,
component_name="ecommerce",
instance_id="catalog",
config={"allow_reviews": True}
).instantiate()
marketplace_catalog = ModuleInstance(
module_class=ProductCatalogModule,
component_name="marketplace",
instance_id="vendor_catalog",
config={"allow_reviews": False}
).instantiate()
# Результат:
# ecommerce_catalog → DB: ecommerce_catalog_products
# marketplace_catalog → DB: marketplace_vendor_catalog_products
# Полная изоляция!
| Drupal | CIFRA Platform | Описание |
|---|---|---|
| Entity Type | Element: Entity | Базовые типы сущностей (User, Node, Product) |
| Field API | Element: Field | Динамические поля, attachable к любой сущности |
| Bundle | Module Entity Config | Конфигурация сущности в контексте модуля |
| Module | Module | Модуль как набор функционала |
| Configuration | Component Config | Настройки компонентов |
| Site | Platform Config | Конфигурация всей платформы |
Drupal:
// Attach field to content type
$field_storage = FieldStorageConfig::create([
'field_name' => 'field_bio',
'entity_type' => 'user',
'type' => 'text_long',
]);
$field_storage->save();
CIFRA Platform:
# modules/blog/blog_module.yaml
module:
name: BlogModule
entities:
BlogPost:
extends: elements.entities.ContentEntity
# Attach fields (как в Drupal!)
attach_fields:
- source: elements.fields.RichTextField
name: body
- source: elements.fields.ImageField
name: featured_image
max_files: 1
- source: elements.fields.TagField
name: tags
max_tags: 10
Результат: Поля body, featured_image, tags автоматически добавляются к BlogPost без изменения кода!
# elements/fields/email.field.yaml
element_type: field
name: EmailField
base_type: string
Генерируется:
# generated/elements/fields/email_field.py
from platform.core.fields import StringField
from platform.core.validators import EmailValidator
class EmailField(StringField):
def __init__(self, **kwargs):
super().__init__(
max_length=255,
validators=[EmailValidator()],
**kwargs
)
# modules/auth/auth_module.yaml
module:
name: AuthModule
entities:
User:
fields:
email: EmailField
password: PasswordField
Генерируется:
# generated/modules/auth/models.py
from sqlalchemy import Column, String
from generated.elements.fields.email_field import EmailField as EmailFieldType
class User(Base):
__tablename__ = "auth_users"
id = Column(UUID, primary_key=True)
email = Column(String(255), unique=True, nullable=False, index=True)
password = Column(String(255), nullable=False)
# generated/modules/auth/schemas.py
from pydantic import BaseModel, EmailStr
class UserCreateSchema(BaseModel):
email: EmailStr
password: str
# generated/modules/auth/api.py
from fastapi import APIRouter
router = APIRouter(prefix="/auth")
@router.post("/register")
async def register(data: UserCreateSchema):
# Auto-generated handler
pass
# components/ecommerce/ecommerce_component.yaml
component:
name: Ecommerce
modules:
auth:
source: AuthModule
instance_id: ecommerce_auth
Генерируется:
# generated/components/ecommerce/models.py
from generated.modules.auth.models import User as BaseUser
# Клон с префиксом
class User(BaseUser):
__tablename__ = "ecommerce_auth_users" # Префикс добавлен!
# generated/components/ecommerce/api.py
from fastapi import APIRouter
router = APIRouter(prefix="/ecommerce/auth") # Префикс добавлен!
@router.post("/register")
async def register(data: UserCreateSchema):
# Handler для ecommerce компонента
pass
# platform.config.yaml
components:
sales_system:
source: SalesSystemComponent
subdomain: sales
Генерируется:
# generated/docker-compose.yml
services:
sales-system:
build: ./generated/components/sales_system
environment:
- DATABASE_URL=postgresql://...
ports:
- "8001:8000"
# generated/nginx.conf
server {
server_name sales.example.com;
location / {
proxy_pass http://sales-system:8000;
}
}
# elements/fields/slug.field.yaml
element_type: field
name: SlugField
base_type: string
constraints:
- type: pattern
value: "^[a-z0-9-]+$"
- type: unique
value: true
# modules/blog/blog_module.yaml
module:
name: BlogModule
version: 1.0.0
uses_elements:
entities: [ContentEntity]
fields: [RichTextField, SlugField, ImageField]
entities:
BlogPost:
extends: elements.entities.ContentEntity
fields:
title: {type: string, max_length: 200}
slug: SlugField
body: RichTextField
featured_image: ImageField
published_at: {type: datetime, nullable: true}
BlogCategory:
fields:
name: {type: string, max_length: 100}
slug: SlugField
api:
endpoints:
- path: /posts
method: GET
handler: list_posts
- path: /posts/{slug}
method: GET
handler: get_post_by_slug
config:
posts_per_page: 10
allow_comments: true
# components/ecommerce/ecommerce_component.yaml (обновляем)
component:
name: EcommerceComponent
modules:
# Существующие модули
auth: {...}
catalog: {...}
# НОВЫЙ модуль блога
blog:
source: BlogModule
instance_id: store_blog
config:
posts_per_page: 15 # Переопределяем default
allow_comments: false
# Добавляем страницы блога
pages:
- path: /blog
component: BlogListPage
uses_modules: [blog]
- path: /blog/{slug}
component: BlogPostPage
uses_modules: [blog]
$ python platform-cli.py generate ecommerce
🔄 Generating code for EcommerceComponent...
✅ Generated modules:
- auth (AuthModule) → generated/components/ecommerce/auth/
- catalog (ProductCatalogModule) → generated/components/ecommerce/catalog/
- blog (BlogModule) → generated/components/ecommerce/blog/ ← НОВЫЙ!
✅ Generated API endpoints:
- POST /ecommerce/auth/register
- GET /ecommerce/catalog/products
- GET /ecommerce/blog/posts ← НОВЫЙ!
- GET /ecommerce/blog/posts/{slug} ← НОВЫЙ!
✅ Generated database migrations:
- ecommerce_blog_blog_post (table)
- ecommerce_blog_blog_category (table)
✅ Generated UI components:
- BlogListPage.tsx
- BlogPostPage.tsx
✅ Generated tests:
- test_blog_api.py
- test_blog_models.py
Done! Run: docker-compose up
$ docker-compose up
# Блог работает!
# GET http://localhost:8000/ecommerce/blog/posts
# GET http://localhost:8000/ecommerce/blog/posts/my-first-post
Результат:
- Описали модуль в YAML (50 строк)
- Сгенерировали код (2000+ строк)
- Блог работает с API, БД, UI
- Без написания кода вручную!
Element (EmailField)
→ используется в 10 модулях
→ модули используются в 20 компонентах
→ компоненты используются в 5 платформах
Результат: 1 описание → 1000 реальных применений
# Один модуль - три разных применения
ProductCatalogModule:
# B2C интернет-магазин
- config: {allow_reviews: true, show_prices: true}
# B2B оптовый портал
- config: {allow_reviews: false, show_prices: false, require_auth: true}
# Marketplace
- config: {allow_reviews: true, multi_vendor: true, commission: 15%}
AI (Claude) может:
- Создавать новые элементы
- Генерировать модули из описания задачи
- Собирать компоненты из модулей
- Предлагать оптимальную конфигурацию
Пример диалога:
User: Нужен блог с комментариями и лайками
AI: Создам BlogModule с:
- Элементы: BlogPost, Comment, Like
- API: CRUD posts, add comment, toggle like
- UI: BlogListPage, BlogPostPage
Добавить к EcommerceComponent?
User: Да
AI: ✅ Сгенерировал код, накатил миграции, блог работает!
CIDL = Universal format для описания:
├─ Elements (.element.yaml)
├─ Modules (.module.yaml)
├─ Components (.component.yaml)
└─ Platform Config (.config.yaml)
Все файлы следуют одному формату:
# Метаданные
<type>:
name: <name>
version: <version>
description: <description>
# Зависимости
uses_<dependency_type>: [...]
# Определения
<definitions>: {...}
# API (если applicable)
api: {...}
# Конфигурация
config: {...}
# CLI для работы со всей иерархией
$ cidl-cli
# Создать новый элемент
$ cidl create element --type field --name CustomField
# Создать модуль
$ cidl create module --name MyModule --uses AuthModule,EmailModule
# Создать компонент
$ cidl create component --name MyApp --modules auth,catalog,blog
# Сгенерировать код
$ cidl generate component MyApp --target python-fastapi
# Валидация
$ cidl validate platform.config.yaml
✅ All components valid
✅ All modules found
✅ All dependencies satisfied
# Визуализация зависимостей
$ cidl visualize platform.config.yaml --output graph.svg
🧱 Lego: Простые элементы → сложные конструкции
🪆 Матрешка: Вложенность уровней (элементы → модули → компоненты → платформа)
Результат:
Платформа собирается из простейших кирпичиков
Каждый уровень строится на предыдущем
Максимальное переиспользование
Полная изоляция экземпляров
AI-friendly архитектура
Готово к имплементации! 🚀