# 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
```

после повторной глобальной проверки.