type: decision
layer: arch
object: class
aspect: system
title: "ADR-005: Классовая система компонентов (class:)"
status: active
date: 2026-04-14
id: ADR-005
Дата: 2026-04-14
Статус: APPROVED
Компоненты платформы использовали type: для описания что это такое: server, service, agent, storage. Но одно поле не давало полного ответа — type: service мог означать и Python-сервис, и Docker-контейнер, и просто папку со скриптами.
AI-агенты не могли автоматически определить: что можно запустить, что только читать, что деплоить.
Ввести поле class: в frontmatter компонентов — явная классификация по поведению:
| Класс | Что это | Пример |
|---|---|---|
AgentComponent |
AI-агент с ролью и протоколом | @architect.agent/ |
ServiceComponent |
Работающий сервис (Python/bash) | @rebuild.service/ |
DockerService |
Docker Compose сервис | @md-viewer.service/ |
ServerComponent |
Описание физического сервера | @dev-pro-eu.server/ |
StorageComponent |
Хранилище данных | @beget-s3.storage/ |
ConnectorComponent |
Коннектор к внешней системе | @openrouter.connector/ |
CoderComponent |
IT-стек для разработки | @drupal.coder/ |
Маппинг type: → class: зафиксирован в arch-class-system.md.
Только type: без class: — отклонена: type: описывает назначение, class: — поведение. Нужны оба.
Enum в type: (type: docker-service vs python-service) — отклонена: ломает существующий словарь type-значений.
Теги (tags: [docker, python]) — отклонена: теги не дают однозначной классификации для автоматики.
infra/ и system/ получили class: ✅arch-class-system.md — единый реестр всех классов и правилclass: в frontmatter