07.4.3.18.1 — Runtime Event Skeleton Architecture
This commit is contained in:
@@ -1,84 +0,0 @@
|
||||
# ROADMAP UPDATE — Этап 07.4.3.17
|
||||
|
||||
## Завершено
|
||||
|
||||
### Active Screen Lifecycle
|
||||
- внедрён единый lifecycle основных экранов;
|
||||
- реализовано автоматическое закрытие предыдущего экрана;
|
||||
- устранено накопление Telegram UI-сообщений;
|
||||
- унифицировано поведение всех основных экранов.
|
||||
|
||||
---
|
||||
|
||||
## Обновлённая архитектура
|
||||
|
||||
### ActiveScreenManager
|
||||
Теперь отвечает за:
|
||||
- регистрацию активного экрана;
|
||||
- удаление предыдущего экрана;
|
||||
- переключение UI.
|
||||
|
||||
### LiveScreenRunner
|
||||
Теперь отвечает только за:
|
||||
- автообновление live-данных;
|
||||
- worker loop;
|
||||
- refresh Telegram message.
|
||||
|
||||
### Trading Runtime
|
||||
Теперь полностью независим от UI:
|
||||
- AutoTradeRunner;
|
||||
- DebugTradeRunner;
|
||||
- future push-events.
|
||||
|
||||
---
|
||||
|
||||
## Исправленные разделы
|
||||
|
||||
### Основные экраны
|
||||
- Главная
|
||||
- Мониторинг
|
||||
- Рынок
|
||||
- Портфель
|
||||
- Журнал
|
||||
- Торговля
|
||||
- Система
|
||||
- Автоторговля
|
||||
- Debug Auto
|
||||
|
||||
---
|
||||
|
||||
## Новое поведение системы
|
||||
|
||||
### UI
|
||||
- всегда существует только один основной экран;
|
||||
- при открытии нового старый удаляется автоматически.
|
||||
|
||||
### Background Runtime
|
||||
- продолжает работать независимо от UI;
|
||||
- готов к Telegram push-событиям.
|
||||
|
||||
---
|
||||
|
||||
# Следующий этап
|
||||
|
||||
## Planned
|
||||
|
||||
### Telegram Event Push Layer
|
||||
Планируется внедрение:
|
||||
- уведомлений об открытии позиции;
|
||||
- уведомлений о закрытии позиции;
|
||||
- уведомлений о сигналах;
|
||||
- runtime alerts;
|
||||
- system alerts;
|
||||
- execution events.
|
||||
|
||||
---
|
||||
|
||||
## Архитектурная готовность
|
||||
|
||||
Система теперь готова к:
|
||||
- background runtime;
|
||||
- multi-event notifications;
|
||||
- persistent runtime state;
|
||||
- restart-safe workflows;
|
||||
- production lifecycle management.
|
||||
@@ -0,0 +1,213 @@
|
||||
# 07.4.3.18.1 — Skeleton Architecture
|
||||
|
||||
## Цель этапа
|
||||
|
||||
Заложить базовую архитектуру слоя runtime-событий и Telegram-уведомлений без переноса существующей бизнес-логики уведомлений.
|
||||
|
||||
Главная задача этапа — подготовить ядро, чтобы в следующих шагах можно было переносить уведомления из `AutoTradeRunner`, `DebugTradeRunner`, `ExecutionEngine` и других runtime-компонентов без переписывания архитектуры.
|
||||
|
||||
## Что добавлено
|
||||
|
||||
### Runtime Events Layer
|
||||
|
||||
Создан новый слой:
|
||||
|
||||
```text
|
||||
app/src/runtime_events/
|
||||
__init__.py
|
||||
event_types.py
|
||||
models.py
|
||||
publisher.py
|
||||
```
|
||||
|
||||
Назначение слоя:
|
||||
|
||||
```text
|
||||
runtime logic
|
||||
↓
|
||||
RuntimeEvent
|
||||
↓
|
||||
RuntimeEventPublisher
|
||||
```
|
||||
|
||||
Этот слой отвечает за публикацию событий runtime-уровня, но не знает деталей Telegram, UI или конкретных шаблонов сообщений.
|
||||
|
||||
### Notification Layer
|
||||
|
||||
Создан новый слой:
|
||||
|
||||
```text
|
||||
app/src/notifications/
|
||||
__init__.py
|
||||
models.py
|
||||
service.py
|
||||
targets.py
|
||||
dedupe.py
|
||||
templates/
|
||||
__init__.py
|
||||
signal.py
|
||||
execution.py
|
||||
channels/
|
||||
__init__.py
|
||||
telegram.py
|
||||
```
|
||||
|
||||
Назначение слоя:
|
||||
|
||||
```text
|
||||
RuntimeEvent
|
||||
↓
|
||||
NotificationService
|
||||
↓
|
||||
Notification template
|
||||
↓
|
||||
TelegramNotificationChannel
|
||||
```
|
||||
|
||||
Этот слой отвечает за:
|
||||
- выбор шаблона уведомления;
|
||||
- дедупликацию уведомлений;
|
||||
- отправку в Telegram;
|
||||
- логирование результата доставки;
|
||||
- централизованное хранение Telegram target.
|
||||
|
||||
## Добавленные runtime event types
|
||||
|
||||
Добавлен enum `RuntimeEventType`:
|
||||
|
||||
```text
|
||||
AUTO_SIGNAL_READY
|
||||
POSITION_OPENED
|
||||
POSITION_CLOSED
|
||||
POSITION_FLIPPED
|
||||
EXECUTION_BLOCKED
|
||||
RISK_ALERT
|
||||
SYSTEM_ALERT
|
||||
```
|
||||
|
||||
На этапе 07.4.3.18.1 эти события только описаны архитектурно. Массовый перенос runtime-логики на них будет сделан следующими подэтапами.
|
||||
|
||||
## Добавлена модель RuntimeEvent
|
||||
|
||||
Добавлена единая модель события:
|
||||
|
||||
```text
|
||||
RuntimeEvent
|
||||
event_type
|
||||
source
|
||||
title
|
||||
payload
|
||||
priority
|
||||
dedupe_key
|
||||
created_at
|
||||
```
|
||||
|
||||
Это будущий контракт между торговым runtime и системой уведомлений.
|
||||
|
||||
## Добавлена модель NotificationMessage
|
||||
|
||||
Добавлена единая модель готового уведомления:
|
||||
|
||||
```text
|
||||
NotificationMessage
|
||||
title
|
||||
text
|
||||
priority
|
||||
parse_mode
|
||||
dedupe_key
|
||||
```
|
||||
|
||||
Эта модель отделяет runtime-событие от конкретного Telegram-сообщения.
|
||||
|
||||
## Добавлен NotificationTargetRegistry
|
||||
|
||||
Создан in-memory registry для хранения активной Telegram-цели уведомлений:
|
||||
|
||||
```text
|
||||
NotificationTargetRegistry
|
||||
set_bot()
|
||||
set_default_chat()
|
||||
get_bot()
|
||||
get_default_chat_id()
|
||||
is_ready()
|
||||
```
|
||||
|
||||
Пока target хранится в памяти. В будущем его можно перенести в БД без изменения runtime-слоя.
|
||||
|
||||
## Интеграция с app bootstrap
|
||||
|
||||
В `app/src/bootstrap/app_factory.py` добавлена регистрация `Bot` в `NotificationTargetRegistry` сразу после создания Telegram Bot.
|
||||
|
||||
Это даёт notification layer доступ к bot instance без прямой зависимости от UI handler-ов.
|
||||
|
||||
## Интеграция с AUTO/DEBUG runner
|
||||
|
||||
В `AutoTradeRunner.register_screen()` и `DebugTradeRunner.register_screen()` добавлена регистрация текущего `chat_id` как default notification target.
|
||||
|
||||
Это позволяет будущим runtime-уведомлениям знать, куда отправлять сообщения.
|
||||
|
||||
## Что не менялось на этом этапе
|
||||
|
||||
На этом этапе намеренно не переносились:
|
||||
|
||||
- strong signal alerts;
|
||||
- paper execution alerts;
|
||||
- risk alerts;
|
||||
- Telegram send_message из существующих runner-ов;
|
||||
- cooldown-логика strong signal;
|
||||
- execution alert dedupe.
|
||||
|
||||
Эти изменения будут выполняться поэтапно, чтобы не сломать текущую рабочую логику.
|
||||
|
||||
## Исправление circular import
|
||||
|
||||
После первичной интеграции был найден circular import:
|
||||
|
||||
```text
|
||||
notifications.__init__
|
||||
→ NotificationService
|
||||
→ runtime_events
|
||||
→ RuntimeEventPublisher
|
||||
→ NotificationService
|
||||
```
|
||||
|
||||
Исправление:
|
||||
|
||||
- из `runtime_events/__init__.py` убран экспорт `RuntimeEventPublisher`;
|
||||
- из `notifications/__init__.py` убран экспорт `NotificationService`.
|
||||
|
||||
Теперь прямые импорты выполняются из конкретных модулей:
|
||||
|
||||
```python
|
||||
from src.runtime_events.publisher import RuntimeEventPublisher
|
||||
from src.notifications.service import NotificationService
|
||||
```
|
||||
|
||||
## Проверка
|
||||
|
||||
Проверено:
|
||||
|
||||
```bash
|
||||
python -m compileall src
|
||||
python -m src.main
|
||||
```
|
||||
|
||||
Ожидаемое поведение после этапа:
|
||||
|
||||
- бот запускается без ImportError;
|
||||
- основные экраны открываются;
|
||||
- текущая UI lifecycle логика не меняется;
|
||||
- новых runtime Telegram-уведомлений пока не появляется;
|
||||
- notification target регистрируется при открытии AUTO/DEBUG экранов.
|
||||
|
||||
## Итог
|
||||
|
||||
Этап 07.4.3.18.1 завершает подготовку архитектурного skeleton для будущего runtime notification pipeline.
|
||||
|
||||
Следующий этап:
|
||||
|
||||
```text
|
||||
07.4.3.18.2 — Move strong signal alerts
|
||||
```
|
||||
|
||||
На нём strong signal alerts будут перенесены из `AutoTradeRunner` в новый runtime event / notification слой.
|
||||
Reference in New Issue
Block a user