# Build 015.1 — Common Models Extension / RuntimeResult

**Engineering Build Document**

---

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

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

---

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

Во время проектирования `RuntimeProtocol` было установлено, что Runtime не может возвращать `EngineResult`.

`EngineResult` описывает результат выполнения одного Engine.

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

---

# Цель Build

Добавить в Common Layer модель:

```text
RuntimeResult
```

`RuntimeResult` является единым контрактом результата выполнения Runtime Layer.

---

# Architecture

`RuntimeResult` агрегирует результаты нескольких Engine.

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

Основной источник истины:

```text
engine_results
```

Все производные данные вычисляются из него.

---

# Architecture Review

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

- модель относится к Common Layer;
- RuntimeResult нужен Runtime, Coordinator, стратегиям, диагностике и тестам;
- производные данные не должны храниться отдельно;
- RuntimeResult не должен зависеть от Runtime-реализации.

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

---

# Architecture Decision (ADR)

## Решение

Добавить `RuntimeResult` в `common.models`.

## Статус

**Accepted**

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

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

Размещение `RuntimeResult` в Common Layer сохраняет однонаправленные зависимости и позволяет использовать модель разными слоями платформы.

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

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

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

---

# Build Design

Модель добавлена в файл:

```text
app/src/trading/market_intelligence/common/models.py
```

Расположение:

```text
EngineResult
↓
RuntimeResult
```

---

# Implementation

Реализованы хранимые поля:

```text
engine_results
diagnostics
started_at
finished_at
duration_ms
metadata
```

Реализованы вычисляемые свойства:

```text
successful_results
failed_results
partial_results
stale_results
executed_engines
failed_engines
successful_engines
has_errors
is_successful
total_engines
successful_count
```

---

# Compile Check

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

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

Результат:

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

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

---

# Domain Review

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

`RuntimeResult`:

- агрегирует результаты нескольких `EngineResult`;
- не содержит аналитической логики;
- не принимает торговых решений;
- не зависит от Runtime-реализации;
- не зависит от Coordinator;
- не зависит от конкретных Engine;
- производные данные вычисляются из `engine_results`.

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

---

# Documentation

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

- Build History;
- Runtime Contract;
- Common Models Documentation;
- будущая документация Runtime Layer.

---

# Acceptance

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

Выполнены:

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

Статус Build:

**Accepted**

---

# Итоги Build

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

- Common Layer получил модель `RuntimeResult`;
- Runtime Layer получил будущий выходной контракт;
- Coordinator сможет работать с агрегированным результатом Runtime;
- подготовлена основа для Build 015.2 — `runtime/protocol.py`.

---

# Следующий Build

```text
Build 015.2

Runtime Protocol

runtime/protocol.py
```