# Build 015.7 — Runtime Validation

**Engineering Build Document**

---

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

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

---

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

После реализации компонентов:

- Runtime Registry;
- Runtime Runner;
- Runtime Dependencies;

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

Однако отсутствовала единая точка проверки корректности Runtime перед началом выполнения.

Проверка конфигурации Runtime должна выполняться централизованно и до запуска любого Engine.

---

# Цель Build

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

```text
RuntimeValidation
```

который подтверждает готовность Runtime Layer к выполнению анализа.

---

# Architecture

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

```text
RuntimeRegistry
```

и выполняет проверку корректности зарегистрированных Engine.

Компонент:

- не создаёт Engine;
- не запускает Engine;
- не изменяет Registry;
- не выполняет анализ рынка;
- не строит граф зависимостей самостоятельно.

Проверка зависимостей делегируется компоненту:

```text
RuntimeDependencies
```

---

# Architecture Review

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

- RuntimeValidation имеет единственную ответственность;
- проверки отделены от Registry и Runner;
- RuntimeDependencies используется повторно без дублирования логики;
- Coordinator не участвует в проверке Runtime;
- архитектурные зависимости соответствуют утверждённой модели Runtime Layer.

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

---

# Architecture Decision (ADR)

## Решение

В Runtime Layer вводится новый инфраструктурный компонент:

```text
RuntimeValidation
```

## Статус

**Accepted**

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

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

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

Проверка зависимостей выполняется посредством использования уже существующего `RuntimeDependencies`.

Это сохраняет принцип единственной ответственности и предотвращает дублирование логики.

---

# Build Design

Создан файл:

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

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

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

---

# Implementation

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

```text
RuntimeValidation
```

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

```text
validate(registry)
```

Во время проверки выполняются следующие этапы:

```text
_validate_registry()
_validate_metadata()
_validate_duplicates()
RuntimeDependencies.resolve()
```

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

```text
RuntimeValidationError
EmptyRuntimeRegistryError
DuplicateEngineRegistrationError
InvalidEngineMetadataError
```

---

# Compile Check

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

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

Результат:

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

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

---

# Domain Review

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

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

- RuntimeValidation проверяет только готовность Runtime;
- Engine не создаются;
- Engine не запускаются;
- Registry не изменяется;
- RuntimeResult не формируется;
- аналитическая логика отсутствует;
- проверка зависимостей делегирована RuntimeDependencies.

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

---

# Code Review / Runtime Review

Проверка успешно завершена.

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

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

Во время Code Review также подтверждено, что проверка повторной регистрации Engine в текущей реализации практически недостижима из-за использования словаря в `RuntimeRegistry`. Тем не менее данная проверка сохранена как часть публичного контракта `RuntimeValidation`, что обеспечивает устойчивость архитектуры при возможном изменении внутренней реализации Registry.

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

---

# Documentation

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

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

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

---

# Acceptance

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

Выполнены:

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

Статус Build:

**Accepted**

---

# Итоги Build

В результате Build 015.7 Runtime Layer получил централизованный механизм проверки собственной корректности.

Теперь Runtime способен:

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

После завершения Build 015.7 базовая инфраструктура Runtime Layer сформирована полностью.

---

# Следующий Build

```text
Build 015.8

Runtime Service

runtime/service.py
```