# Build 015.6 — Runtime Dependencies

**Engineering Build Document**

---

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

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

---

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

После реализации `RuntimeRegistry` и `RuntimeRunner` Runtime Layer получил возможность хранить и выполнять зарегистрированные Engine.

Однако порядок выполнения Engine должен учитывать зависимости, объявленные в `EngineMetadata`.

Для этого необходим отдельный компонент Runtime Layer, отвечающий только за разрешение зависимостей.

---

# Цель Build

Создать компонент:

```text
RuntimeDependencies
```

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

---

# Architecture

`RuntimeDependencies` получает:

```text
tuple[EngineRegistration, ...]
```

и возвращает:

```text
tuple[EngineRegistration, ...]
```

в порядке выполнения.

Компонент не создаёт Engine, не запускает Engine, не формирует результаты и не зависит от Coordinator.

---

# Architecture Review

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

- Engine остаются независимыми;
- зависимости объявляются через `EngineMetadata`;
- Runtime не содержит аналитики;
- Runner не смешивается с Dependency Resolver;
- Registry не строит граф зависимостей;
- Coordinator пока не реализуется.

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

---

# Architecture Decision (ADR)

## Решение

В Runtime Layer вводится компонент:

```text
RuntimeDependencies
```

## Статус

**Accepted**

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

Engine могут объявлять обязательные зависимости через:

```text
EngineMetadata.required_dependencies
```

Runtime должен определить порядок выполнения Engine до запуска анализа.

Эта ответственность не относится к Registry, Runner, Coordinator или конкретным Engine.

---

# Build Design

Создан файл:

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

Обновлён файл:

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

---

# Implementation

Реализован класс:

```text
RuntimeDependencies
```

Публичный API:

```text
resolve(registrations)
```

Внутренние этапы:

```text
_build_registration_map()
_build_graph()
_validate_dependencies()
_topological_sort()
_visit()
```

Добавлены Runtime-исключения:

```text
MissingEngineDependencyError
CircularEngineDependencyError
```

---

# Compile Check

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

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

Результат:

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

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

---

# Domain Review

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

`RuntimeDependencies`:

- работает только с зарегистрированными Engine;
- берёт зависимости исключительно из `EngineMetadata.required_dependencies`;
- не создаёт экземпляры Engine;
- не запускает Engine;
- не формирует `EngineResult` или `RuntimeResult`;
- не зависит от Coordinator;
- не добавляет аналитической логики.

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

---

# Code Review / Runtime Review

Проверка пройдена.

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

- компонент имеет одну ответственность;
- отсутствующие обязательные зависимости обрабатываются отдельной ошибкой;
- циклические зависимости обрабатываются отдельной ошибкой;
- топологическая сортировка возвращает корректный порядок выполнения;
- зависимости между слоями не нарушены.

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

---

# Documentation

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

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

Runtime Contract не изменяется.

---

# Acceptance

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

Выполнены:

- ✅ Architecture
- ✅ Architecture Review
- ✅ Architecture Decision
- ✅ Build Design
- ✅ Implementation
- ✅ Compile Check
- ✅ Domain Review
- ✅ Code Review
- ✅ Runtime Review
- ✅ Documentation
- ✅ Acceptance

Статус Build:

**Accepted**

---

# Итоги Build

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

- Runtime Layer получил механизм разрешения зависимостей;
- порядок выполнения Engine теперь может быть построен из `EngineMetadata`;
- Engine остаются независимыми и не обращаются друг к другу напрямую;
- Registry, Runner и Dependency Resolver имеют разные зоны ответственности;
- Runtime Layer стал готов к следующему этапу — Runtime Validation или Coordinator Core.

---

# Следующий Build

```text
Build 015.7

Runtime Validation

runtime/validation.py
```