# Build 015.4 — Runtime Registry

**Engineering Build Document**

---

# Контроль документа

| Свойство | Значение |
|----------|-----------|
| Build | 015.4 |
| Название | Runtime Registry |
| Статус | **Accepted** |
| Подсистема | Market Intelligence |
| Layer | Runtime |
| Тип | Architecture + Implementation |
| Версия | 1.0 |
| Язык | Русский |

---

# Причина появления Build

После завершения Build:

- 015.1 (`RuntimeResult`);
- 015.2 (`RuntimeProtocol`);
- 015.3 (`EngineRegistration`);

Runtime получил все необходимые фундаментальные модели для реализации первого инфраструктурного компонента Runtime Layer.

Таким компонентом стал `RuntimeRegistry`.

---

# Цель Build

Создать каталог зарегистрированных аналитических Engine.

Registry является единым источником информации о зарегистрированных Engine и предоставляет минимальный API регистрации.

---

# Architecture

`RuntimeRegistry` отвечает исключительно за регистрацию аналитических Engine.

Registry не выполняет анализ рынка.

Registry не создаёт `EngineContext`.

Registry не запускает Engine.

Registry не агрегирует результаты.

Registry не управляет Coordinator.

Единственная ответственность Registry — управление зарегистрированными Engine.

---

# Architecture Review

Проверка подтвердила:

- Registry соответствует принципу Single Responsibility;
- Registry использует `EngineRegistration`;
- Registry не содержит аналитики;
- Registry не зависит от Coordinator;
- Registry не зависит от AutoTrade;
- Registry не создаёт `EngineContext`;
- Registry не запускает Engine.

Архитектура Build признана корректной.

---

# Architecture Decision (ADR)

## Решение

Добавить компонент:

```text
RuntimeRegistry
```

в Runtime Layer.

## Статус

**Accepted**

## Обоснование

Runtime должен иметь единый каталог зарегистрированных Engine.

Registry хранит записи регистрации и предоставляет к ним доступ другим компонентам Runtime.

Для хранения используется модель:

```text
EngineRegistration
```

## Утверждённая модель хранения

```python
dict[
    EngineName,
    EngineRegistration,
]
```

## Публичный API

```text
register()
unregister()
get()
contains()
list()
clear()
```

## Запрещено

Registry не должен содержать:

```text
analyze()
run()
execute()
resolve_dependencies()
validate()
build_graph()
sort()
```

## Последствия

После принятия решения:

- Runtime получил единый каталог Engine;
- Registry остаётся независимым от аналитики;
- RuntimeRunner сможет использовать Registry;
- DependencyResolver сможет использовать Registry;
- добавление новых Engine не требует изменения Runtime.

---

# Build Design

Создан файл:

```text
app/src/trading/market_intelligence/runtime/registry.py
```

Внутренний каталог Registry:

```python
self._engines: dict[
    EngineName,
    EngineRegistration,
]
```

При регистрации Registry самостоятельно создаёт:

```text
EngineRegistration
```

через:

```python
engine_type.get_metadata()
```

Дополнительная фабрика регистрации не используется.

---

# Implementation

Реализован компонент:

```text
RuntimeRegistry
```

Публичный интерфейс:

```text
register()
unregister()
get()
contains()
list()
clear()
```

Registry использует:

```text
EngineRegistration
```

как единственную единицу хранения зарегистрированных Engine.

---

# Compile Check

Проверка выполнена командой:

```bash
python -m compileall src/trading/market_intelligence
```

Результат:

- успешно скомпилирован `runtime/registry.py`;
- синтаксические ошибки отсутствуют;
- циклические зависимости отсутствуют.

**Статус:** ✅ Passed

---

# Domain Review

Проверено соответствие предметной области.

Подтверждено:

- Registry хранит только зарегистрированные Engine;
- Registry использует `EngineRegistration`;
- Registry не содержит аналитики;
- Registry не управляет выполнением Engine;
- Registry не создаёт `EngineContext`;
- Registry не формирует `RuntimeResult`;
- Registry не знает Coordinator;
- Registry не зависит от AutoTrade;
- Registry не обращается к бирже, БД, Telegram или EventBus.

**Статус:** ✅ Passed

---

# Documentation

В рамках Build должны быть обновлены:

- Build History;
- Runtime Architecture;
- Runtime Contract;
- Runtime Layer Documentation.

---

# Acceptance

Build считается завершённым.

Выполнены:

- ✅ Architecture
- ✅ Architecture Review
- ✅ Architecture Decision (ADR)
- ✅ Build Design
- ✅ Implementation
- ✅ Compile Check
- ✅ Domain Review
- ✅ Documentation
- ✅ Acceptance

Статус Build:

**Accepted**

---

# Итоги Build

В результате Build 015.4:

- Runtime Layer получил первый инфраструктурный компонент;
- появился единый каталог зарегистрированных Engine;
- Runtime получил единый механизм регистрации аналитических движков;
- Registry использует `EngineRegistration` как атомарную запись;
- подготовлена основа для реализации Runtime Runner.

---

# Архитектурные принципы, закреплённые Build

## Registry отвечает только за регистрацию

`RuntimeRegistry` не выполняет анализ и не управляет выполнением Engine.

Единственная ответственность Registry — управление каталогом зарегистрированных Engine.

---

## EngineRegistration является единицей хранения

Внутри Registry хранится исключительно:

```text
EngineRegistration
```

Хранение отдельных `EngineType` или `EngineMetadata` запрещено.

---

## Runtime самостоятельно создаёт регистрацию

Во время регистрации Registry самостоятельно получает Metadata:

```python
metadata = engine_type.get_metadata()
```

и создаёт:

```text
EngineRegistration
```

Отдельная фабрика регистрации не вводится.

---

## Registry не содержит эксплуатационной логики

Registry не выполняет:

- анализ;
- запуск Engine;
- сортировку;
- разрешение зависимостей;
- построение графов;
- валидацию.

Все перечисленные обязанности относятся к другим компонентам Runtime Layer.

---

# Следующий Build

```text
Build 015.5

Runtime Runner

runtime/runner.py
```