← Вайбкодинг · Вайбкодинг с OpenCode EN FR Курс 30/70 →

Модуль 07 — Рефакторинг в масштабе

Время: 5 часов · Формат: теория 90 мин + практика 210 мин


Теория

1. Почему большие правки агента опасны

1 файл, 30 строк  → вы читаете дифф за 2 минуты
12 файлов, 900 строк → вы читаете «по диагонали» и пропускаете удалённую проверку

Риск растёт нелинейно: чем больше дифф, тем меньше вероятность, что вы его реально прочли.

Правило: размер диффа — управляемый параметр. Не «пусть сделает всё», а «сделай шаг 1».

2. Стратегия «зелёный репозиторий»

Каждый шаг заканчивается зелёными тестами и коммитом:

[зелёный] → шаг → [зелёный] → коммит → шаг → [зелёный] → коммит

Если шаг сломал тесты и не чинится за 2 итерации — откат и другой подход. Это дешевле, чем чинить каскад из 5 сломанных шагов.

3. Порядок миграции

Безопасная последовательность для «заменить X на Y»:

1. Ввести Y рядом с X (не удаляя X)
2. Перевести один вызов на Y
3. Тесты зелёные → коммит
4. Перевести остальные вызовы (по одному)
5. Удалить X
6. Удалить мёртвый код

Ключ: никогда не удалять старое до того, как новое проверено.

4. Как ограничивать агента

Не трогай файлы вне src/billing/.
Не меняй публичные сигнатуры функций.
Не добавляй зависимости.
Один шаг — один коммит.
После каждого шага запускай ./scripts/check.sh и останавливайся, если красное.

Ограничения по путям работают лучше, чем уговоры «будь аккуратен».

5. Поиск зависимостей

Перед миграцией — карта:

grep -rn "old_function" src/

Дайте агенту результат и попросите план по файлам. Это дешевле, чем «найди сам в 500 файлах», и точнее.

6. Механические vs смысловые правки

Тип Пример Как делать
Механические переименование, форматирование можно пачкой, проверка — тесты
Смысловые изменение логики по одному файлу, с ревью

Не смешивайте: «переименуй и заодно улучши» = непроверяемый дифф.

7. Feature flags и обратимость

Если фича большая — за флагом:

if settings.use_new_billing:
    new_path()
else:
    old_path()

Это позволяет мержить раньше, откатывать мгновенно и тестировать постепенно.


Чек-лист понимания

  1. Почему большой дифф опаснее суммы маленьких?
  2. Зачем вводить новое до удаления старого?
  3. Чем механические правки отличаются от смысловых по процессу?
  4. Что делать, если шаг не зеленеет за 2 итерации?

Практика

См. practice.md.