build 054: remove legacy klines compatibility API

This commit is contained in:
2026-07-16 09:28:42 +03:00
parent f027436e2f
commit 09f3f66a4e
3 changed files with 355 additions and 620 deletions

View File

@@ -0,0 +1,355 @@
# Build 054 — Удаление legacy API get_klines и compatibility bridge
## Статус
**Завершён**
---
## Цель Build
Удалить больше не используемый compatibility API legacy OHLCV:
```text
ExchangeService.get_klines()
```
а также внутренний bridge:
```text
ExchangeService._kline_from_candle()
```
и связанный test-only файл:
```text
tests/unit/integrations/exchange/test_service_klines.py
```
Build 054 не удаляет сами модели:
```text
Kline
KlineBatch
```
Они сохраняются до отдельного Build после повторной глобальной проверки зависимостей.
---
## Исходное состояние
По результатам Build 052 было подтверждено:
- production-вызовы `ExchangeService.get_klines()` отсутствуют;
- `get_klines()` используется только тестами;
- `_kline_from_candle()` используется только внутри `get_klines()` и его тестов;
- `Kline` и `KlineBatch` остаются только внутри compatibility-слоя;
- активный Market Analysis полностью использует `ExchangeService.get_candles()`.
После Build 053 также был удалён последний неиспользуемый production-файл:
```text
src/trading/market_analysis/indicators_legacy.py
```
Таким образом compatibility API больше не обслуживал ни одного рабочего потребителя.
---
## Объём изменений
В Build 054 изменён:
```text
src/integrations/exchange/service.py
```
Удалён:
```text
tests/unit/integrations/exchange/test_service_klines.py
```
Добавлена документация:
```text
docs/migrations/build_054.md
```
Build 054 не изменяет:
```text
src/integrations/exchange/models.py
src/market_data/acquisition/
src/trading/market_analysis/
```
Build также не удаляет:
```text
Kline
KlineBatch
```
---
## Изменения в ExchangeService
Из файла:
```text
src/integrations/exchange/service.py
```
удалены импорты:
```text
Kline
KlineBatch
```
Удалён публичный legacy-метод:
```text
ExchangeService.get_klines()
```
Удалён внутренний compatibility helper:
```text
ExchangeService._kline_from_candle()
```
Остальной код `ExchangeService` сохранён без изменений.
---
## Удаление test-only compatibility coverage
Удалён файл:
```text
tests/unit/integrations/exchange/test_service_klines.py
```
Он полностью покрывал уже удалённые компоненты:
```text
get_klines()
_kline_from_candle()
Candle → Kline
KlineBatch
```
Новый канонический API продолжает покрываться файлом:
```text
tests/unit/integrations/exchange/test_service_candles.py
```
---
## Архитектурный результат
До Build 054:
```text
ExchangeService.get_klines()
ExchangeService.get_candles()
Candle
_kline_from_candle()
Kline
KlineBatch
```
После Build 054:
```text
ExchangeService.get_candles()
tuple[Candle, ...]
```
Compatibility bridge полностью удалён.
---
## Полный regression suite
После удаления выполнена команда:
```bash
python -m pytest -q
```
Результат:
```text
779 passed in 2.66s
```
Снижение количества тестов связано с удалением test-only файла:
```text
tests/unit/integrations/exchange/test_service_klines.py
```
Регрессий не обнаружено.
---
## Контроль отсутствия get_klines
Выполнена команда:
```bash
grep -RIn \
--exclude-dir="__pycache__" \
--exclude="*.pyc" \
"\.get_klines(" \
src tests
```
Результат:
```text
пусто
```
---
## Контроль отсутствия _kline_from_candle
Выполнена команда:
```bash
grep -RIn \
--exclude-dir="__pycache__" \
--exclude="*.pyc" \
"_kline_from_candle" \
src tests
```
Результат:
```text
пусто
```
---
## Контроль оставшихся Kline и KlineBatch
Выполнена команда:
```bash
grep -RIn \
--exclude-dir="__pycache__" \
--exclude="*.pyc" \
-E "\bKlineBatch\b|\bKline\b" \
src tests
```
Результат:
```text
src/integrations/exchange/models.py:93:class Kline:
src/integrations/exchange/models.py:110:class KlineBatch:
src/integrations/exchange/models.py:113: candles: list[Kline]
```
Следовательно, после Build 054 `Kline` и `KlineBatch` существуют только как неиспользуемые определения моделей.
---
## Проверка форматирования
Выполнена команда:
```bash
git diff --check
```
Вывод отсутствует.
Whitespace-ошибок не обнаружено.
---
## Фактический diff
Перед добавлением документации:
```text
app/src/integrations/exchange/service.py | 69 ------------------
app/tests/unit/integrations/exchange/test_service_klines.py | 551 -----------------------------------------------------------------------------------------------------------------------------------------------
2 files changed, 620 deletions(-)
```
---
## Что намеренно не выполнено
Build 054 намеренно не включает:
- удаление `Kline`;
- удаление `KlineBatch`;
- изменение `src/integrations/exchange/models.py`;
- изменение `ExchangeService.get_candles()`;
- изменение Market Data Acquisition;
- изменение Market Analysis;
- изменение торговой логики;
- изменение структуры каталогов.
---
## Критерии завершения
Build 054 считается завершённым, поскольку:
- production-потребители `get_klines()` отсутствовали до удаления;
- `get_klines()` удалён;
- `_kline_from_candle()` удалён;
- test-only compatibility coverage удалено;
- полный suite проходит;
- grep по `get_klines()` пустой;
- grep по `_kline_from_candle()` пустой;
- `Kline` и `KlineBatch` остались только в `models.py`;
- `git diff --check` чистый.
---
## Итог
**Build 054 завершён успешно.**
Текущее состояние:
```text
get_klines — удалён
_kline_from_candle — удалён
test_service_klines.py — удалён
Full test suite — 779 passed
Kline/KlineBatch — только неиспользуемые определения в models.py
```
Следующий этап — удалить модели:
```text
Kline
KlineBatch
```
из:
```text
src/integrations/exchange/models.py
```
после повторной глобальной проверки.