07.4.3.18.1 — Runtime Event Skeleton Architecture

This commit is contained in:
2026-05-09 18:21:02 +03:00
parent 3181ac680c
commit 7e5ecc2ed9
22 changed files with 641 additions and 99 deletions

View File

@@ -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.

View File

@@ -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 слой.