feat: add market data architecture and complete migration through build 039

This commit is contained in:
2026-07-14 09:58:16 +03:00
parent 26deb861bc
commit a996f2f797
443 changed files with 80452 additions and 1335 deletions

View File

@@ -0,0 +1,360 @@
# 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
```