build 039: complete Quotes Feed migration foundation

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

View File

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