type: standard
layer: arch
object: class
aspect: system
form: table
title: "Классовая система платформы"
status: active
version: 1.0.0
date: 2026-04-11
knowledge_level: У1
parent: arch-document-system.md
deps:
- arch-document-system.md
- arch-filesystem-structure.md
- arch-component-structure.md
Стандарт определяет четвёртый слой платформенного знания: классы. Всё в платформе — экземпляр класса, унаследованного от абстрактного класса в architect/. Реестр базовых классов, правила наследования, обязательные поля.
Три нижних слоя платформы описывают форму:
| Слой | Что описывает |
|---|---|
| Файловая система | где лежит |
| Правила и именование | как называется |
| Документы | что содержит |
| Классы | чем является, от чего наследует |
Классы дают:
- Полиморфизм — единый интерфейс для разных компонентов одного типа
- Наследование — шаблон в projector/ конкретизирует абстракцию из arch/
- Инстанциирование — реальный компонент в system/, coder/, projects/ реализует шаблон
- Валидация — можно проверить, что компонент соответствует своему классу
arch/ ← абстрактный класс (правила, интерфейс)
↓ extends
projector/ ← шаблонный класс (заготовка с переменными)
↓ instantiates
system/ ← экземпляр (реальный компонент)
coder/ ← экземпляр
projects/ ← экземпляр
Пример для сервиса:
arch-component-structure.md ← ServiceComponent (абстракция)
↓
projector/templates/@service/ ← ServiceTemplate (шаблон)
↓
infra/@nocodb.service/ ← NocoDBService (экземпляр)
| Класс | Суффикс | Слой | Описание |
|---|---|---|---|
ServiceComponent |
.service |
infra/, system/ | Сервис Docker Compose |
ServerComponent |
.server, .pc, .infra |
infra/ | Физический/виртуальный сервер |
AgentComponent |
.agent |
system/ | AI-агент с AI.md |
ApiComponent |
.api, .connector |
library/, infra/ | REST/GraphQL коннектор |
DataComponent |
.data |
library/connectors/data/ | БД / хранилище коннектор |
StorageComponent |
.storage |
infra/, library/ | S3 / файловое хранилище |
CoderComponent |
.coder |
coder/ | Специализированный кодер |
LibraryComponent |
.lib |
library/ | Переиспользуемая библиотека |
BotComponent |
.bot |
system/ | Telegram-бот |
UiComponent |
.ui, .web, .portal, .app |
system/, infra/ | Веб-интерфейс / приложение |
| Класс | Тип | Описание |
|---|---|---|
StandardDocument |
standard |
Стандарт платформы (arch/) |
ConceptDocument |
concept |
Концептуальный документ |
PatternDocument |
pattern |
Паттерн реализации |
TemplateDocument |
template |
Шаблон для заполнения |
DecisionDocument |
decision |
Архитектурное решение (ADR) |
GuideDocument |
guide |
Руководство (howto) |
OperationDocument |
operation |
Описание операции |
| Класс | Тип | Описание |
|---|---|---|
BizProject |
biz |
Бизнес-проект без IT-части |
ItProject |
it |
IT-проект (см. arch-project-it-structure.md) |
SysProject |
sys |
Системный проект (инфра, платформа) |
| Класс | Наследует | Описание |
|---|---|---|
PolicyConfidentiality |
— | П1 КОНФИДЕНЦИАЛЬНОСТЬ — базовый класс |
PolicyCodeData |
PolicyConfidentiality | П2 КОД/ДАННЫЕ |
PolicyServices |
PolicyConfidentiality | П3 СЕРВИСЫ |
PolicyGit |
PolicyConfidentiality | П4 GIT |
PolicyResources |
PolicyConfidentiality | П5 РЕСУРСЫ |
PolicyAgents |
PolicyConfidentiality | П6 АГЕНТЫ |
PolicyLocking |
PolicyConfidentiality | П7 БЛОКИРОВКА |
SecurityCredentials |
PolicyConfidentiality | С1 CREDENTIALS |
SecurityBackup |
PolicyConfidentiality | С2 BACKUP |
SecurityRollback |
PolicyConfidentiality | С3 ROLLBACK |
Полная таблица соответствия значений поля type: в frontmatter и классов из реестра:
type: |
Класс | Типичное расположение |
|---|---|---|
standard |
StandardDocument |
arch/standards/ |
concept |
ConceptDocument |
arch/concept/ |
pattern |
PatternDocument |
arch/patterns/ |
template |
TemplateDocument |
projector/templates/ |
decision |
DecisionDocument |
arch/decisions/ |
guide |
GuideDocument |
arch/guidance/ |
operation |
OperationDocument |
arch/standards/ (операции) |
agent |
AgentComponent |
system/@{имя}.agent/ |
service |
ServiceComponent |
system/, infra/, services/ |
api |
ApiComponent |
coder/library/@{имя}.api/ |
data |
DataComponent |
coder/library/@{имя}.data/ |
storage |
StorageComponent |
coder/library/@{имя}.storage/ |
coder |
CoderComponent |
coder/@{имя}.coder/ |
bot |
BotComponent |
system/@{имя}.bot/ |
ui |
UiComponent |
system/@{имя}.ui/ |
it |
ItProject |
projects/org/{домен}/{проект}/ |
biz |
BizProject |
projects/org/{домен}/{проект}/ |
sys |
SysProject |
projects/sys/{проект}/ |
При создании нового документа или компонента: найти type: в левой колонке → взять класс для поля class: или объявления в AI.md.
Каждый компонент объявляет свой класс в index.yaml:
id: nocodb
type: service
layer: infra
version: "1.0.0"
status: active
class: ServiceComponent
parent: infra/
extends: projector/templates/@service/
deps: []
| Поле | Обязательно | Описание |
|---|---|---|
class |
✅ | Имя базового класса из реестра |
extends |
если есть шаблон | Путь к шаблону в projector/ |
parent |
✅ | Родительский узел файловой системы |
deps |
если есть | Зависимости от других компонентов |
Каждый агент явно объявляет наследование политик:
---
extends: PolicyConfidentiality
class: AgentComponent
---
И конкретизирует зону конфиденциальности:
## КОНФИДЕНЦИАЛЬНО В ЭТОЙ ЗОНЕ
- ...специфичные для агента данные...
✅ Каждый компонент объявляет class: в index.yaml
✅ Каждый агент объявляет extends: PolicyConfidentiality в AI.md
✅ Шаблон в projector/ расширяет абстрактный класс из arch/
✅ Экземпляр не противоречит классу (нет полей запрещённых классом)
❌ Создавать компонент без class: в index.yaml
❌ Агент без PolicyConfidentiality
❌ Наследовать минуя уровень (instance → abstract, пропуская template)
❌ Переопределять locked-поля класса без @keeper.agent
Существующие компоненты без class: — патчить отдельной операцией после финализации arch-class-system.md.
Список: BACKLOG.md — пункт 15.
При создании нового компонента:
1. Определить тип → выбрать класс из реестра
2. Найти шаблон в projector/templates/@{тип}/
3. Скопировать шаблон → заполнить переменные
4. Добавить class: и extends: в index.yaml
5. Создать тройку AI.md + CLAUDE.md + (README.md если публичный)
6. Зарегистрировать в родительском CLAUDE.md