Amiga
Оглавление курса · урок 6 из 13

Модуль 2 · Строим · урок 6 из 13

Итерации: маленькие шаги и частые коммиты

Агент пишет код быстрее, чем вы его читаете. Если дать ему большую задачу, получите дифф на тысячу строк, который невозможно проверить, и откатить его можно только целиком. Короткие шаги с коммитом после каждого делают работу проверяемой и обратимой. Разберём на третьем срезе «Переговорок» — входе по корпоративной почте.

Какого размера шаг

Хороший шаг — одна мысль, которую можно проверить за один проход: один коммит, одно изменение поведения, дифф, который вы готовы прочитать целиком. Если описание шага не помещается в одно предложение без «и ещё», он слишком большой.

Срез «вход по почте» в спецификации звучит просто. В коде это шесть шагов:

  1. Модель User (почта, роль), сид с двумя учебными пользователями.
  2. POST /api/auth/request-link: принимает почту корпоративного домена, создаёт одноразовый токен (в базе — только его хэш, срок жизни 15 минут), отправляет письмо со ссылкой. Локально письмо видно в Mailpit.
  3. GET /api/auth/verify: проверяет токен, гасит его, создаёт сессию, ставит cookie.
  4. Проверка сессии для всех маршрутов /api, замена всех TODO(auth) на реального пользователя.
  5. Выход: удаление сессии.
  6. Экран входа и обработка истёкшей ссылки.

Попросите агента составить такую разбивку сам, в режиме планирования, и запишите её подпунктами в docs/PLAN.md. Тогда новая сессия завтра начнётся с чтения плана, а не с ваших воспоминаний.

Цикл одного шага

text
Шаг 3.2 из docs/PLAN.md: POST /api/auth/request-link.
Токен: 32 случайных байта (crypto.randomBytes), в базе — SHA-256 хэш,
expiresAt = now + 15 минут. Почта только домена из CORPORATE_DOMAIN.
Ответ всегда 202 и одинаковый текст — не раскрываем, есть ли такой сотрудник.
Письмо через nodemailer на SMTP из окружения (локально Mailpit).
Только этот шаг. Готово, когда: npm run check зелёный, есть тест
на чужой домен и на то, что сырой токен не попадает в базу.

Дальше всегда одинаково:

  1. Агент работает. Если видите, что он ушёл не туда, не ждите конца: в CLI Enter во время работы добавляет указание в текущий ход, а Tab ставит сообщение в очередь на следующий.
  2. Проверка: npm run check агент прогонит сам, но для шагов с поведением нажмите сами — откройте Mailpit на localhost:8025 и посмотрите письмо.
  3. Дифф: /diff. Для кода входа читайте всё — это одно из мест, где курс требует чтения построчно.
  4. Коммит.
bash
git add -A
git commit -m "auth: запрос ссылки для входа (PLAN 3.2)"

Каталог .git в песочнице Codex защищён от записи даже в режиме workspace-write, поэтому агент попросит одобрения на коммит. Многие предпочитают коммитить сами: коммит — момент, когда вы подтверждаете, что прочитали дифф.

Когда шаг не получился

Не чините плохой результат пятью поправками подряд. Каждая неудачная попытка остаётся в контексте и тянет следующие ответы в ту же сторону. Варианты по возрастанию решительности:

  • Поправить постановку. Двойной Esc на пустом поле ввода открывает редактирование предыдущего сообщения — можно переформулировать задачу и ответвиться от этой точки.
  • Откатить код. git restore . и git clean -fd (сначала посмотрите список через git clean -n) возвращают рабочее дерево к последнему коммиту. Именно поэтому коммиты частые: откат стоит одного шага, а не дня.
  • Начать заново. Новый чат (/new) с промптом, в который вы добавили то, что поняли из неудачи. Документация Codex прямо называет антипаттерном один чат на весь проект — один чат должен соответствовать одной единице работы.

Если сессия просто разрослась, а шаг идёт нормально, хватит /compact. Подробнее о сессиях — в уроке «Сессии», об откатах — в уроке «Git как страховка».

Длинные автономные циклы

Противоположность коротким шагам — цикл, в котором агент работает без вас часами. Джеффри Хантли описал крайнюю форму под названием Ralph: один и тот же промпт подаётся агенту снова и снова, каждая итерация берёт одну задачу из приоритизированного списка, а тесты, типы и статический анализ отвергают плохой результат. На Codex это выглядело бы так:

bash
while :; do cat PROMPT.md | codex exec --sandbox workspace-write - ; done

Сам автор говорит, что подход годится для новых проектов с ожиданием «готово примерно на 90%», а для существующих кодовых баз его не рекомендует. Он работает, только если обратная связь сильная: без хорошего набора тестов цикл уверенно накапливает заглушки и сломанную сборку. Мягкий вариант в интерактивном Codex — режим цели /goal, где агент держит долгосрочную задачу.

Для «Переговорок» честный вывод такой: длинный цикл уместен для рутины с жёсткой проверкой («доведи покрытие сервиса броней до всех правил R1–R5»), но не для входа и прав доступа.

Ритм дня

Практичный ритм для вайбкод-проекта: утром новая сессия читает docs/PLAN.md и берёт следующий шаг; после каждого шага — коммит; в конце дня агент записывает в план, что сделано и что осталось. Через неделю у вас история из небольших коммитов, по которой легко найти, где появилась ошибка (git bisect на такой истории работает быстро и точно).

Попробуйте сами

10–15 мин на рабочем месте
  1. Возьмите следующий срез своего проекта и попросите Codex разбить его на шаги, каждый из которых описывается одним предложением. Запишите шаги в docs/PLAN.md.
  2. Пройдите два шага полным циклом: промпт, проверка, /diff, коммит. Засеките, сколько времени уходит на чтение диффа.
  3. Намеренно отклоните один результат: откатите git restore ., поправьте промпт через двойной Esc и сравните вторую попытку с первой.

Коротко

  • Шаг — одна мысль, один коммит, дифф, который вы прочитаете целиком.
  • Разбивку среза на шаги храните в docs/PLAN.md, а не в чате.
  • Цикл: промпт — проверка — дифф — коммит.
  • Не чините плохой результат серией поправок: откат и новый промпт дешевле.
  • Длинные автономные циклы требуют сильной автоматической проверки и не подходят для критичного кода.
Отметка хранится только в вашем браузере
Хотите связаться с владельцем
компании напрямую?
Дмитрий Тарасов
Дмитрий Тарасов
СЕО

НАПИСАТЬ

Написать в MAX