Модуль 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()
Это позволяет мержить раньше, откатывать мгновенно и тестировать постепенно.
Чек-лист понимания
- Почему большой дифф опаснее суммы маленьких?
- Зачем вводить новое до удаления старого?
- Чем механические правки отличаются от смысловых по процессу?
- Что делать, если шаг не зеленеет за 2 итерации?
Практика
См. practice.md.