## План

Нарезка на таски. Каждая граница между тасками стоит переориентации свежего контекста —
это десятки тысяч токенов, — поэтому таск должен окупать свою границу.

### Сколько тасков

Масштаб уже назначен и он же задаёт вилку: малая — 2–3, средняя — 4–8, крупная —
9–16. Больше шестнадцати означает, что дробить надо не задачи, а сам прогон.

### Каким должен быть таск

**Вертикальный срез, а не слой.** «Схема + запрос + обработчик + тест для одной функции»
— это таск. «Все модели» — это не таск, это слой, и он ничего не демонстрирует.

Два теста на выживание. **Окупаемость:** то, что исполнитель узна́ет, разбираясь в этом
куске, стоит дороже, чем стоила граница? **Соседство:** если этот таск и следующий всё
равно правят одни файлы — это один таск.

Крупные рефакторинги вертикально не режутся. Ведите их через «добавил новое рядом со
старым → перевёл вызовы пачками → снёс старое».

### Как заводить

```
chekan task add 01 --title "..." --requirements R01 R02 --deps  --zone src/bot/ \
    --verify "python3 -m pytest tests/test_bot.py -q"
```

- **`--requirements`** обязательны. Таск без требования не пройдёт гейт.
- **`--deps`** — таски, которые должны закрыться раньше.
- **`--zone`** — каталог, который таск правит. Единственное место, где в плане уместны
  пути. Два таска в одной зоне без зависимости между собой столкнутся при параллельном
  запуске, и гейт это поймает.
- **`--verify`** — команда, которой этот таск будет доказан. Придумайте её сейчас, на
  свежую голову, а не в конце, когда захочется поставить галочку.

### Гейт G3 — прослеживаемость в обе стороны

Каждое живое требование ведёт хотя бы к одному таску, и каждый таск ведёт хотя бы к
одному требованию. Плюс: нет циклов в зависимостях, нет столкновений по зонам.

```
chekan gate G3
```
