11 KiB
Build 056 — Финальная архитектурная верификация OHLCV Feed
Статус
Завершён
Цель Build
Выполнить финальную архитектурную проверку миграции OHLCV Feed и документально подтвердить, что:
- legacy-модели
KlineиKlineBatchполностью удалены; - legacy API
get_klines()полностью удалён; - compatibility helper
_kline_from_candle()полностью удалён; - неиспользуемый файл
indicators_legacy.pyполностью удалён; - активный production-код использует только каноническую модель
Candle; - получение OHLCV выполняется только через канонический слой
Market Data Acquisition; - обратная зависимость
Market Data → Tradingотсутствует; - полный regression suite проходит успешно.
Build 056 не изменяет production-код.
Исходное состояние
До Build 056 были завершены следующие этапы:
Build 044 — создан канонический Candles Feed foundation
Build 045 — добавлен CandlesFeedRegistry
Build 046 — добавлен CandlesAcquisitionService
Build 047 — ExchangeService переключён на канонический Candles Feed
Build 048 — вычислительные потребители Market Analysis переведены на Candle
Build 049 — добавлен публичный ExchangeService.get_candles()
Build 050 — MarketAnalysisService переключён на get_candles()
Build 051 — HTF-анализ переключён на get_candles()
Build 052 — выполнен аудит legacy OHLCV
Build 053 — удалён indicators_legacy.py
Build 054 — удалены get_klines() и _kline_from_candle()
Build 055 — удалены Kline и KlineBatch
Build 056 является финальной проверкой завершённой миграции.
Объём Build
В Build 056 добавляется только документация:
docs/migrations/build_056.md
Production-код и тесты не изменяются.
Контроль полного отсутствия legacy OHLCV
Выполнена команда:
grep -RIn \
--exclude-dir="__pycache__" \
--exclude="*.pyc" \
-E "\bKlineBatch\b|\bKline\b|get_klines|_kline_from_candle|indicators_legacy" \
src tests
Результат:
пусто
Это подтверждает полное отсутствие:
Kline
KlineBatch
get_klines
_kline_from_candle
indicators_legacy
в исходном коде и тестах.
Контроль использования канонической модели Candle
Выполнена команда:
grep -RIn \
--exclude-dir="__pycache__" \
--exclude="*.pyc" \
"models\.candle import Candle" \
src tests
Каноническая модель используется в:
src/market_data/acquisition/service.py
src/market_data/acquisition/protocol.py
src/market_data/acquisition/feeds/candles_feed.py
src/market_data/acquisition/adapters/dzengi/mapper.py
src/market_data/acquisition/handlers/candles_handler.py
src/integrations/exchange/service.py
src/trading/market_analysis/indicators/volatility.py
src/trading/market_analysis/structure.py
src/trading/market_analysis/quality.py
Также она используется в специализированных unit-тестах Acquisition, Exchange Integration и Market Analysis.
Контроль production-вызовов get_candles()
Выполнена команда:
grep -RIn \
--exclude-dir="__pycache__" \
--exclude="*.pyc" \
"\.get_candles(" \
src tests
Production-вызовы обнаружены в:
src/trading/market_analysis/service.py
src/trading/market_analysis/htf.py
Фактические production-точки:
MarketAnalysisService — один вызов
HTF volatility — один вызов
HTF trend — один вызов
Остальные вызовы находятся в специализированных тестах канонического API.
Контроль REST-точки OHLCV
Выполнена команда:
grep -RIn \
--exclude-dir="__pycache__" \
--exclude="*.pyc" \
'"/api/v1/klines"' \
src tests
Результат:
src/market_data/acquisition/adapters/dzengi/rest.py
tests/unit/market_data/acquisition/adapters/dzengi/test_candle_rest.py
В production-коде REST endpoint существует только в:
src/market_data/acquisition/adapters/dzengi/rest.py
Второе совпадение находится в unit-тесте канонического REST adapter.
Следовательно, прямое получение OHLCV вне Market Data Acquisition отсутствует.
Контроль отсутствия обратной зависимости Market Data → Trading
Выполнена команда:
grep -RIn \
--exclude-dir="__pycache__" \
--exclude="*.pyc" \
"from src.trading\|import src.trading" \
src/market_data
Результат:
пусто
Это подтверждает соблюдение направленности зависимостей:
Market Data
↓
Market Intelligence / Trading
и отсутствие обратной связи:
Market Data
✕
Trading
Контроль канонического Candles pipeline
Выполнена команда:
grep -RIn \
--exclude-dir="__pycache__" \
--exclude="*.pyc" \
"CandlesAcquisitionService\|CandlesFeedRegistry\|DzengiCandlesDocumentSource\|DzengiCandlesDocumentHandler\|CandlesFeed" \
src tests
Подтверждены следующие production-компоненты:
DzengiCandlesDocumentSource
DzengiCandlesDocumentHandler
CandlesFeed
CandlesFeedProtocol
CandlesFeedRegistry
CandlesAcquisitionService
Также подтверждено их специализированное unit-покрытие.
Финальная архитектура OHLCV
После завершения миграции production-путь выглядит следующим образом:
Dzengi REST API
↓
DzengiCandlesDocumentSource
↓
schema validation
↓
parser
↓
value validation
↓
mapper
↓
Candle
↓
DzengiCandlesDocumentHandler
↓
CandlesFeed
↓
CandlesFeedRegistry
↓
CandlesAcquisitionService
↓
ExchangeService.get_candles()
↓
MarketAnalysisService
↓
HTF volatility / HTF trend
↓
Market Analysis calculations
Единственная внутренняя модель OHLCV:
src.market_data.acquisition.models.candle.Candle
Проверка компиляции
Выполнена команда:
python -m compileall \
src/market_data/acquisition \
src/integrations/exchange \
src/trading/market_analysis
Компиляция завершена успешно.
Ошибок синтаксиса и импорта не обнаружено.
Полный regression suite
Выполнена команда:
python -m pytest -q
Результат:
779 passed in 3.22s
Регрессий не обнаружено.
Проверка Git
Выполнены команды:
git status
git log --oneline -12
git diff --check
Результат:
working tree clean
git diff --check — чисто
Текущий последний commit перед Build 056:
39f156c build 055: remove legacy Kline models
Подтверждённые архитектурные свойства
После финальной проверки подтверждено:
- В проекте существует только одна каноническая модель OHLCV —
Candle. - REST endpoint
/api/v1/klinesлокализован в адаптере Dzengi. - Parsing, schema validation, value validation и mapping находятся в
Market Data Acquisition. - Acquisition pipeline доступен через
CandlesAcquisitionService. - Exchange Integration предоставляет публичный
get_candles(). - Market Analysis и HTF используют
get_candles(). - Legacy API и legacy-модели полностью удалены.
- Обратная зависимость
Market Data → Tradingотсутствует. - Полный test suite проходит.
- Рабочее дерево чистое.
Что намеренно не выполнялось
Build 056 не включает:
- изменение production-кода;
- изменение тестов;
- изменение торговой логики;
- изменение вычислительных алгоритмов;
- изменение структуры каталогов;
- дополнительный refactoring unrelated-компонентов;
- переименование существующих диагностических причин;
- изменение API Dzengi.
Критерии завершения
Build 056 считается завершённым, поскольку:
- grep по legacy OHLCV полностью пустой;
- канонический
Candleиспользуется во всех активных слоях; - production-вызовы выполняются через
get_candles(); - REST endpoint локализован в каноническом адаптере;
- обратная зависимость
Market Data → Tradingотсутствует; - канонический pipeline полностью присутствует;
- compileall проходит;
- полный regression suite проходит;
- Git-состояние чистое.
Итог
Build 056 завершён успешно.
Миграция OHLCV Feed полностью завершена.
Удалены:
Kline
KlineBatch
get_klines()
_kline_from_candle()
indicators_legacy.py
Активная система использует:
Candle
CandlesFeed
CandlesFeedRegistry
CandlesAcquisitionService
ExchangeService.get_candles()
Итоговые проверки:
Legacy grep — пусто
Compileall — успешно
Full test suite — 779 passed
git diff --check — чисто
OHLCV Feed теперь полностью соответствует утверждённой архитектуре Market Data Acquisition.