6.9 KiB
Build 015.2 — Runtime Protocol
Engineering Build Document
Контроль документа
| Свойство | Значение |
|---|---|
| Build | 015.2 |
| Название | Runtime Protocol |
| Статус | Accepted |
| Подсистема | Market Intelligence |
| Layer | Runtime |
| Тип | Architecture + Implementation |
| Версия | 1.0 |
| Язык | Русский |
Причина появления Build
После появления RuntimeResult стало возможно определить официальный контракт Runtime Layer.
Runtime должен взаимодействовать с аналитическими Engine через единый стабильный интерфейс и не зависеть от конкретных реализаций Engine.
Цель Build
Создать файл:
app/src/trading/market_intelligence/runtime/protocol.py
и определить в нём официальный контракт Runtime Layer.
Architecture
RuntimeProtocol описывает только внешний интерфейс Runtime.
Runtime отвечает за:
- регистрацию Engine;
- удаление Engine;
- получение зарегистрированного Engine;
- выполнение анализа;
- возврат агрегированного
RuntimeResult.
Runtime не отвечает за:
- аналитику;
- торговые решения;
- порядок стратегий;
- пользовательский интерфейс;
- работу с биржей;
- работу с БД;
- журналирование.
Architecture Review
Проверка подтвердила:
- Runtime работает через
EngineProtocol; - Runtime регистрирует классы Engine, а не экземпляры;
- Runtime возвращает
RuntimeResult; - Runtime не знает конкретных Engine;
- Runtime не содержит аналитики;
- Runtime не содержит Coordinator-логики;
- AutoTrade не изменяется.
Архитектура Build признана корректной.
Architecture Decision (ADR)
Решение
Runtime Layer регистрирует классы Engine, а не экземпляры Engine.
Официальный контракт:
register_engine(
engine_type: type[EngineProtocol],
) -> None
Статус
Accepted
Обоснование
EngineMetadata доступна без создания экземпляра Engine через get_metadata().
Поэтому Runtime не обязан создавать объект Engine на этапе регистрации.
Регистрация класса позволяет Runtime самостоятельно управлять жизненным циклом экземпляров Engine.
Обязательное правило
Все Engine обязаны иметь конструктор без пользовательских параметров.
Всё изменяемое состояние и конфигурация анализа передаются через:
EngineContext
Запрещено
register_engine(engine: EngineProtocol)
Регистрация экземпляров Engine запрещена.
Последствия
После принятия решения:
- Runtime контролирует жизненный цикл Engine;
- Engine не сохраняют состояние между запусками;
- Runtime готов к параллельному выполнению;
- Registry сможет хранить типы Engine;
- добавление новых Engine не требует изменения Runtime.
Build Design
Реализуется контракт:
RuntimeProtocol
├── register_engine(engine_type)
├── unregister_engine(engine_name)
├── get_engine(engine_name)
└── analyze(context)
Файл не содержит реализации Runtime.
Implementation
Реализован файл:
app/src/trading/market_intelligence/runtime/protocol.py
Содержимое контракта:
class RuntimeProtocol(Protocol):
def register_engine(
self,
engine_type: type[EngineProtocol],
) -> None:
...
def unregister_engine(
self,
engine_name: EngineName,
) -> None:
...
def get_engine(
self,
engine_name: EngineName,
) -> type[EngineProtocol] | None:
...
async def analyze(
self,
context: EngineContext,
) -> RuntimeResult:
...
Compile Check
Проверка выполнена командой:
python -m compileall src/trading/market_intelligence
Результат:
- успешно скомпилирован
runtime/protocol.py; - синтаксические ошибки отсутствуют;
- циклические зависимости отсутствуют.
Статус: ✅ Passed
Domain Review
Проверено соответствие предметной области.
RuntimeProtocol:
- работает через
EngineProtocol; - регистрирует классы Engine;
- возвращает
RuntimeResult; - не знает конкретных Engine;
- не содержит аналитики;
- не содержит Coordinator-логики;
- не зависит от AutoTrade;
- не обращается к бирже, БД, Telegram или EventBus;
- получает изменяемые данные анализа только через
EngineContext.
Статус: ✅ Passed
Documentation
В рамках Build должны быть обновлены:
- Build History;
- Runtime Contract;
- Engine Layer Architecture;
- Runtime Architecture.
Acceptance
Build считается завершённым.
Выполнены:
- ✅ Architecture
- ✅ Architecture Review
- ✅ Architecture Decision (ADR)
- ✅ Build Design
- ✅ Implementation
- ✅ Compile Check
- ✅ Domain Review
- ✅ Documentation
- ✅ Acceptance
Статус Build:
Accepted
Итоги Build
В результате Build 015.2:
- создан официальный контракт Runtime Layer;
- Runtime получил стабильную зависимость от
EngineProtocol; - закреплена регистрация классов Engine вместо экземпляров;
- Runtime возвращает агрегированный
RuntimeResult; - подготовлена основа для реализации Runtime Registry.
Следующий Build
Build 015.3
Runtime Registry
runtime/registry.py