Files
dzentra_bot/docs/market_intelligence/builds/build-015-2-runtime-protocol.md

6.9 KiB
Raw Permalink Blame History

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