# Build 055 — Удаление legacy-моделей Kline и KlineBatch

## Статус

**Завершён**

---

## Цель Build

Удалить больше не используемые legacy-модели OHLCV:

```text
Kline
KlineBatch
```

из файла:

```text
src/integrations/exchange/models.py
```

Build 055 завершает удаление legacy-моделей свечей после предварительного удаления всех их production-потребителей, compatibility API и test-only зависимостей.

---

## Исходное состояние

До Build 055 было подтверждено:

- `ExchangeService.get_klines()` удалён в Build 054;
- `ExchangeService._kline_from_candle()` удалён;
- `tests/unit/integrations/exchange/test_service_klines.py` удалён;
- `src/trading/market_analysis/indicators_legacy.py` удалён в Build 053;
- глобальный grep показывал `Kline` и `KlineBatch` только как определения в `src/integrations/exchange/models.py`;
- активный production-код полностью использует каноническую модель `Candle`.

---

## Объём изменений

В Build 055 изменён только:

```text
src/integrations/exchange/models.py
```

Удалены определения:

```text
Kline
KlineBatch
```

Добавлена документация:

```text
docs/migrations/build_055.md
```

Build 055 не изменяет:

```text
src/integrations/exchange/service.py
src/market_data/acquisition/
src/trading/market_analysis/
tests/
```

---

## Предварительная проверка зависимостей

Перед удалением выполнена команда:

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

Это подтвердило, что модели больше нигде не используются.

---

## Удалённый блок

Из `src/integrations/exchange/models.py` удалены:

```python
# Одна свеча OHLCV.
@dataclass(slots=True)
class Kline:
    symbol: str
    interval: str

    open_time: int

    open_price: float
    high_price: float
    low_price: float
    close_price: float
    volume: float

    source: str


# Пакет свечей.
@dataclass(slots=True)
class KlineBatch:
    symbol: str
    interval: str
    candles: list[Kline]
    source: str
```

Остальные модели файла сохранены без изменений.

---

## Проверка компиляции

Выполнена команда:

```bash
python -m compileall \
  src/integrations/exchange/models.py
```

Результат:

```text
успешно
```

---

## Полный regression suite

Выполнена команда:

```bash
python -m pytest -q
```

Результат:

```text
779 passed in 2.46s
```

Регрессий не обнаружено.

---

## Контроль отсутствия Kline и KlineBatch

Выполнена команда:

```bash
grep -RIn \
  --exclude-dir="__pycache__" \
  --exclude="*.pyc" \
  -E "\bKlineBatch\b|\bKline\b" \
  src tests
```

Результат:

```text
пусто
```

Это подтверждает полное удаление legacy-моделей OHLCV из исходного кода и тестов.

---

## Контроль отсутствия legacy compatibility-компонентов

Выполнена команда:

```bash
grep -RIn \
  --exclude-dir="__pycache__" \
  --exclude="*.pyc" \
  "get_klines\|_kline_from_candle\|indicators_legacy" \
  src tests
```

Результат:

```text
пусто
```

---

## Проверка форматирования

Выполнена команда:

```bash
git diff --check
```

Вывод отсутствует.

Whitespace-ошибок не обнаружено.

---

## Фактический diff

Перед добавлением документации:

```text
app/src/integrations/exchange/models.py | 26 --------------------------
1 file changed, 26 deletions(-)
```

---

## Архитектурный результат

После Build 055 legacy OHLCV полностью удалён из моделей Exchange Integration.

Активная архитектура использует только каноническую модель:

```text
src.market_data.acquisition.models.candle.Candle
```

Текущий путь:

```text
Dzengi REST API
    ↓
CandlesDocumentSource
    ↓
schema validation
    ↓
parser
    ↓
value validation
    ↓
mapper
    ↓
Candle
    ↓
CandlesFeed
    ↓
CandlesFeedRegistry
    ↓
CandlesAcquisitionService
    ↓
ExchangeService.get_candles()
    ↓
Market Analysis
```

---

## Что намеренно не выполнено

Build 055 намеренно не включает:

- изменение канонической модели `Candle`;
- изменение `ExchangeService.get_candles()`;
- изменение Market Data Acquisition;
- изменение Market Analysis;
- изменение торговой логики;
- изменение структуры каталогов;
- дополнительную cleanup-перестройку unrelated-моделей.

---

## Критерии завершения

Build 055 считается завершённым, поскольку:

- `Kline` не используется до удаления;
- `KlineBatch` не используется до удаления;
- оба определения удалены;
- полный test suite проходит;
- grep по `Kline` и `KlineBatch` пустой;
- grep по `get_klines`, `_kline_from_candle` и `indicators_legacy` пустой;
- `git diff --check` чистый.

---

## Итог

**Build 055 завершён успешно.**

Текущее состояние:

```text
Kline — удалён
KlineBatch — удалён
get_klines — отсутствует
_kline_from_candle — отсутствует
indicators_legacy — отсутствует
Full test suite — 779 passed
```

Следующий этап — финальная архитектурная верификация всей миграции OHLCV Feed.