architect/decisions/005-class-system.md

type: decision
layer: arch
object: class
aspect: system
title: "ADR-005: Классовая система компонентов (class:)"
status: active
date: 2026-04-14
id: ADR-005


ADR-005: Классовая система компонентов (class:)

Дата: 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]) — отклонена: теги не дают однозначной классификации для автоматики.


Последствия