Команда Codex CLI /review: проверка кода и изменений

Слеш-команда Codex CLI /review применяется для проверки рабочего дерева и поиска проблем в локальных изменениях: она помогает посмотреть на незакоммиченный код глазами внимательного ревьюера, выявить возможные ошибки, сомнительные места, регрессии и несоответствия задаче. Это особенно полезно перед коммитом, отправкой pull request или передачей результата коллеге.

Главная ценность /review — не в автоматической гарантии качества, а в дополнительном независимом взгляде на уже внесённые изменения. Команда может заметить то, что легко пропустить после нескольких часов работы над одним и тем же кодом.

При этом ревью не заменяет тесты, ручную проверку, анализ требований и полноценную проверку поведения приложения. Codex CLI оценивает доступный ему контекст и состояние рабочего дерева, поэтому качество результата зависит от размера изменений, ясности задачи, наличия тестов и того, какие файлы действительно попали в область анализа. Ниже разберём, как применять /review, в какие моменты она особенно полезна и чем отличается от соседних команд.

Как использовать /review

Этот раздел важен потому, что результат ревью во многом зависит не только от самой команды, но и от состояния репозитория. Перед запуском нужно понимать, какие изменения находятся в рабочем дереве, какие файлы уже добавлены в индекс, а какие ещё нет, и какую задачу должен был решить код.

Хорошее ревью начинается не с вопроса «есть ли здесь ошибки?», а с вопроса «что именно должен был изменить этот набор файлов и не нарушил ли он остальное?»

Обычно работа выглядит так: вы открываете Codex CLI в каталоге проекта, убеждаетесь, что находитесь в нужной ветке, просматриваете статус Git и запускаете /review. В зависимости от версии CLI и текущего режима команда может анализировать изменения рабочего дерева, включая незакоммиченные правки. Точный набор поддерживаемых аргументов лучше сверять с документацией установленной версии.

Шаг Что сделать Зачем это нужно
1 Перейти в корень проекта Чтобы инструмент увидел правильный репозиторий и его конфигурацию
2 Проверить активную ветку Чтобы случайно не анализировать изменения из другой задачи
3 Посмотреть статус Git Чтобы понять, какие файлы изменены, добавлены или удалены
4 Убедиться, что важные файлы сохранены Ревью проверяет состояние файлов на момент запуска
5 Запустить /review Получить список найденных рисков и замечаний
6 Проверить замечания вручную Отделить реальные проблемы от предположений и спорных рекомендаций

Перед ревью полезно привести рабочее дерево в понятное состояние. Необязательно коммитить изменения, но стоит убрать случайные временные файлы, незаконченные эксперименты и посторонние правки. Иначе команда может обратить внимание на шум, а действительно важная проблема затеряется среди второстепенных замечаний.

git status --short
git diff --stat
git diff

# После проверки состояния репозитория:
/review

Если изменения большие, лучше заранее понять их границы. Например, отдельно проверить новый модуль, затем интеграцию с API, а после этого — тесты и конфигурацию. Такой подход не всегда означает запуск нескольких независимых ревью: иногда достаточно сформулировать в запросе, на какую часть изменений обратить особое внимание.

Состояние рабочего дерева Что увидит ревьюер Риск Рекомендация
Небольшие изменения в нескольких файлах Связную картину задачи Низкий Можно запускать ревью сразу
Большой набор разнотипных изменений Смешанный контекст Средний Разделить работу на логические части
Есть временные файлы Лишний шум Средний Убрать файлы или явно обозначить их назначение
Изменения не сохранены Неполное состояние проекта Высокий Сохранить файлы перед запуском
Одновременно изменены код и сгенерированные файлы Причины и последствия вперемешку Средний Уточнить, какие файлы являются источниками истины

Как подготовить запрос к ревью

Само имя команды уже задаёт общий сценарий, но дополнительный контекст помогает получить более полезный результат. Можно указать, что именно изменилось, какие требования особенно важны и какие риски нужно проверить: авторизацию, обработку ошибок, совместимость API, производительность или обратную совместимость.

Я добавил проверку прав доступа к маршрутам заказов.
Проверь:
— нельзя ли обойти проверку через другой endpoint;
— не раскрываются ли данные чужого заказа;
— корректно ли обрабатываются ошибки 401 и 403;
— не сломалась ли работа администратора.

/review
Тип контекста Пример формулировки Когда полезен
Цель изменения «Добавлена фильтрация заказов по статусу» Чтобы оценить соответствие реализации задаче
Критический риск «Особенно проверь утечку данных между пользователями» Для безопасности и изоляции данных
Ограничение «Публичный API нельзя менять обратно несовместимым способом» Для сохранения совместимости
Ожидаемое поведение «При пустом результате должен возвращаться пустой список» Для проверки граничных случаев

Когда применять /review

/review лучше всего использовать в точках, где цена ошибки уже заметна, но исправить её ещё относительно дёшево. Это не только финальная проверка перед коммитом: команда полезна и после крупного промежуточного шага, когда направление работы уже понятно, а код ещё легко изменить.

Чем раньше обнаружена проблема в небольшой порции изменений, тем меньше вероятность, что она успеет «раствориться» в десятках последующих правок.

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

# Реализована задача, тесты проходят
git status --short
git diff --check

/review

# После исправлений:
git diff

Команда особенно уместна после изменений, затрагивающих несколько слоёв приложения. Например, добавление поля в базу данных может потребовать обновления миграции, модели, схемы валидации, обработчика HTTP-запроса, документации и тестов. Человек нередко проверяет только тот файл, в котором писал основную логику, а ревью помогает посмотреть на цепочку целиком.

Ситуация Почему стоит запустить ревью На что обратить внимание
Перед коммитом Можно исправить проблему до фиксации истории Лишние файлы, ошибки логики, незавершённые участки
Перед pull request Снижается количество очевидных замечаний от команды Соответствие задаче, тесты, читаемость
После рефакторинга Структура могла измениться без изменения внешнего поведения Регрессии, пропущенные вызовы, изменённые зависимости
После исправления бага Фикс может затронуть соседние сценарии Граничные случаи и повторное появление ошибки
Перед релизом Последняя проверка локальных правок Конфигурация, миграции, обратная совместимость

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

Не стоит воспринимать положительный результат как доказательство отсутствия дефектов. Автоматическая проверка может не воспроизвести реальную инфраструктуру, не знать скрытых бизнес-правил, не увидеть проблему в стороннем сервисе или не распознать ошибку, проявляющуюся только при особой последовательности действий.

Задача проверки /review Дополнительная проверка
Очевидная ошибка в условии Часто может обнаружить Тест на положительный и отрицательный сценарии
Нарушение бизнес-правила Зависит от контекста Проверка требований владельцем продукта
Проблема производительности Может заметить подозрительный код Профилирование и нагрузочный тест
Ошибка конфигурации окружения Может быть не видна локально Проверка CI/CD и тестового окружения
Уязвимость в зависимости Не является заменой аудиту Сканирование зависимостей и анализ безопасности

Примеры использования /review

Практические сценарии помогают понять, какие вопросы можно задавать команде и как превращать общий запуск ревью в полезную проверку. Ниже приведены примеры для разных типов изменений: API, базы данных, интерфейса, безопасности, тестов и конфигурации.

Пример 1. Проверка нового API-метода

Новый endpoint может выглядеть корректно при обычном запросе, но скрывать проблемы с валидацией, авторизацией или форматом ошибок. В запросе полезно перечислить ожидаемые статусы и ограничения доступа.

Я добавил POST /api/orders. Проверь: — обязательность полей; — обработку неверного JSON; — проверку прав пользователя; — повторную отправку одного и того же заказа; — соответствие кодов ответа API-контракту. /review
Сценарий:
Красная зона: пользователь не должен создать заказ от имени другого пользователя.
Синяя зона: успешный ответ должен содержать идентификатор созданного заказа.

/review

Пример 2. Проверка миграции базы данных

Изменения схемы опасны тем, что могут повлиять не только на новый код, но и на старые записи, порядок развёртывания и откат. Ревью стоит направить на совместимость и поведение при частично обновлённой системе.

Добавлено поле orders.delivery_date. Проверь: — безопасно ли применять миграцию к существующей базе; — допустимо ли значение NULL для старых записей; — не сломаются ли запросы и индексы; — можно ли выполнить откат; — совпадает ли тип поля с моделью приложения. /review
Особое условие:
миграция должна выполняться на таблице с несколькими миллионами строк без длительной блокировки.

/review

Пример 3. Проверка исправления ошибки в авторизации

В безопасности недостаточно проверить только «правильный» сценарий. Нужно рассмотреть обходы: отсутствие токена, просроченный токен, подмена идентификатора, доступ к чужому ресурсу и различия между ролями.

Исправлена проверка доступа к GET /api/profile/:id. Проверь: — может ли обычный пользователь запросить чужой профиль; — что происходит без токена; — обрабатывается ли просроченный токен; — не доверяет ли сервер значению id из URL; — одинаково ли защищены связанные endpoints. /review
Считай критической проблему, если доступ разрешается только потому,
что идентификатор пользователя пришёл из запроса и не сверяется
с данными из проверенного токена.

/review

Пример 4. Проверка рефакторинга

Рефакторинг часто обещает не менять поведение программы, но именно это обещание и нужно проверять. Особенно полезно искать изменившиеся значения по умолчанию, порядок вызовов, обработку исключений и побочные эффекты.

Перенёс логику расчёта скидки из контроллера в сервис.
Проверь:
— полностью ли сохранено прежнее поведение;
— не изменился ли порядок округления;
— не исчезла ли обработка промокодов;
— не вызывается ли сервис дважды;
— не появились ли циклические зависимости.

/review
Цель рефакторинга — изменить структуру, но не бизнес-результат.
Сравни старый и новый путь для:
— обычного заказа;
— заказа со скидкой;
— заказа с бесплатной доставкой;
— отменённого заказа.

/review

Пример 5. Проверка тестов и конфигурации

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

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

/review
Изменил конфигурацию приложения.
Проверь:
— нет ли секретов в репозитории;
— корректны ли значения по умолчанию;
— не отключена ли проверка TLS;
— совпадают ли имена переменных в коде и CI;
— не изменилось ли поведение production-окружения.

/review
Тип изменения Главный вопрос Типичная ошибка Что подтвердить вручную
API Сохраняется ли контракт? Неверный статус или формат ответа Интеграционные сценарии
Авторизация Можно ли обойти ограничение? Доверие данным из запроса Проверка ролей и чужих ресурсов
Миграция Безопасно ли обновлять старые данные? Блокировка или несовместимый тип Тестовая копия production-базы
Рефакторинг Не изменилось ли поведение? Потерянная ветка логики Сравнение сценариев до и после
Тесты Ловят ли тесты реальную ошибку? Слабое утверждение Намеренное внесение дефекта

Как читать результаты ревью

Ответ /review лучше воспринимать как список гипотез и направлений для проверки, а не как окончательный вердикт. Одно замечание может указывать на реальный дефект, другое — на потенциальный риск, а третье — быть предложением по улучшению, которое не обязательно нужно принимать.

Хорошее замечание должно приводить к проверяемому вопросу: при каких входных данных проблема проявится и какое поведение ожидается вместо текущего?

Начинайте с замечаний, которые могут привести к потере данных, нарушению авторизации, падению сервиса или несовместимости. Затем переходите к корректности, тестируемости и читаемости. Не стоит тратить одинаковое время на критическую уязвимость и спорное переименование локальной переменной.

Категория замечания Пример Приоритет Действие
Критическая безопасность Доступ к чужим данным Немедленно Подтвердить тестом и исправить до слияния
Потеря данных Удаление записей без фильтра Очень высокий Остановить выпуск и проверить сценарий
Функциональная ошибка Неверный расчёт суммы Высокий Добавить воспроизводящий тест
Регрессия Старый сценарий перестал работать Высокий Сравнить поведение до и после
Стиль или поддерживаемость Дублирование кода Средний или низкий Исправить, если улучшение оправдано

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

Замечание ревью:
«При повторной отправке запроса может создаваться два платежа».

Проверка:
1. Отправить один и тот же запрос дважды.
2. Использовать одинаковый ключ идемпотентности.
3. Убедиться, что создан один платёж.
4. Проверить ответ второго запроса.

Вывод: замечание подтверждено только после воспроизводимого сценария.

Если замечание кажется ошибочным, не обязательно сразу его отклонять. Сначала проверьте предпосылки: возможно, ревью не знало о внешнем ограничении, нестандартном формате данных или намеренном компромиссе. Краткое пояснение в коде, тесте или описании pull request иногда снимает вопрос лучше, чем спор о формулировках.

Результат ревью Как поступить Чего избегать
Подтверждённый дефект Исправить и добавить тест Ограничиваться ручным изменением без проверки
Потенциальный риск Воспроизвести сценарий Считать риск доказанной ошибкой
Спорное предложение Сопоставить с требованиями проекта Механически переписывать код
Ложное срабатывание Зафиксировать причину и контекст Игнорировать все будущие замечания

Чем /review отличается от других команд

Похожие слеш-команды могут использоваться рядом, но решают разные задачи. /diff показывает изменения, /plan помогает спроектировать работу до реализации, а /feedback предназначена для отправки обратной связи. /review занимает промежуточное место между просмотром результата и содержательной оценкой его качества.

Команда Основной вопрос Момент применения Результат
/diff Что именно изменилось? До и во время анализа правок Представление различий между версиями
/review Есть ли в изменениях заметные проблемы? После появления рабочего результата Замечания о рисках, ошибках и качестве
/plan Как лучше реализовать задачу? До внесения изменений План действий и последовательность шагов
/feedback Как сообщить мнение или проблему? После использования инструмента или результата Отправленная обратная связь

/diff: просмотр изменений

Команда /diff отвечает прежде всего на вопрос «какие строки поменялись?». Это визуальная и содержательная основа для анализа, но сам просмотр diff не обязательно означает полноценное ревью поведения. Можно увидеть добавленную проверку, но не заметить, что она никогда не вызывается в нужном сценарии.

/diff

Что проверить глазами:
— какие файлы изменены;
— нет ли случайных удалений;
— не попали ли секреты;
— соответствует ли размер diff заявленной задаче.

/review

Удобная последовательность такова: сначала открыть diff, чтобы понять масштаб и направление изменений, затем запустить /review, чтобы получить независимую оценку рисков. Если замечание относится к конкретному месту, снова вернитесь к diff и проверьте окружающий код.

Критерий /diff /review
Показывает строки изменений Да, это основная задача Может использовать изменения как контекст
Ищет логические проблемы Не является основной целью Да, в пределах доступного контекста
Проверяет соответствие задаче Только глазами пользователя Может указать на несоответствие
Заменяет тесты Нет Нет

/plan: планирование до реализации

Команда /plan нужна до того, как изменения появились в рабочем дереве. Она помогает разложить задачу на шаги, определить затрагиваемые компоненты и заранее обнаружить архитектурные ограничения. /review, напротив, оценивает уже сделанную работу.

Задача: добавить экспорт отчётов в CSV.

/plan

Ожидаемые вопросы:
— какие слои приложения затрагиваются;
— где будет формироваться файл;
— как ограничить размер отчёта;
— как обрабатывать ошибки;
— какие тесты нужны.

# После реализации:
/review

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

Этап работы Подходящая команда Главная польза
Понять задачу /plan Выстроить последовательность действий
Сравнить фактические правки с ожиданием /diff Увидеть конкретные изменения
Найти возможные проблемы /review Получить дополнительный анализ
Сообщить о качестве инструмента /feedback Передать обратную связь разработчикам

/feedback: отправка обратной связи

Команда /feedback предназначена не для проверки рабочего дерева как такового, а для сообщения о впечатлениях, проблемах или предложениях по работе инструмента. Если /review нашла сомнительное место в вашем коде, это не означает, что нужно отправлять результат через /feedback. Сначала разберитесь с замечанием; обратная связь нужна, когда вы хотите сообщить о поведении самого Codex CLI.

После использования /review инструмент несколько раз
ошибочно считает обычный вызов API уязвимостью.

/feedback

Описание:
— версия CLI;
— краткий фрагмент контекста;
— полученное замечание;
— почему оно не соответствует проекту;
— ожидаемое поведение.

Обратная связь особенно полезна, если команда стабильно неправильно понимает определённый паттерн, выдаёт неполные результаты или неудобно формулирует важные замечания. Чем точнее описаны входные данные и ожидаемый результат, тем полезнее будет такое сообщение.

Вопрос /review /feedback
Проверяет ли команда ваш код? Да, в рамках доступного контекста Нет, она передаёт сообщение
Кому адресован результат? Разработчику или команде проекта Команде, которая улучшает инструмент
Когда запускать? После появления изменений Когда есть наблюдение о работе CLI
Что нужно приложить? Рабочее дерево и контекст задачи Описание проблемы, версию и ожидаемое поведение

Как выстроить команды в один рабочий процесс

В реальной задаче команды можно использовать последовательно. Сначала сформулировать план, затем реализовать изменения, посмотреть diff, провести ревью и после исправлений отправить обратную связь, если поведение инструмента оказалось неточным или неудобным.

1. /plan
Определить архитектурные шаги и список затрагиваемых файлов.

2. Реализация
Внести изменения и локально запустить тесты.

3. /diff
Проверить фактический набор правок.

4. /review
Попросить найти возможные дефекты и риски.

5. /feedback
Сообщить о проблеме в работе самого инструмента, если она обнаружена.

Важно не превращать этот порядок в формальный ритуал. Маленький косметический фикс не всегда требует подробного плана, а срочный исправляющий коммит может начинаться с diff и теста. Смысл команд — помогать принимать решения, а не добавлять проекту церемоний ради церемоний.

Размер задачи Минимальный набор Расширенный набор
Мелкая правка /diff → тест /diff → /review
Обычная функциональность /plan → код → /review /plan → /diff → /review → тесты
Изменение безопасности План → код → ревью → ручные проверки План → diff → ревью → security-тесты → ручной аудит
Изменение инструмента или процесса Воспроизвести проблему Воспроизвести → /feedback → отслеживать результат

В итоге /review — это практичный этап проверки локальных изменений, а не магический сертификат качества. Используйте её после осмысленного изменения, задавайте конкретные вопросы, связывайте замечания с тестами и не забывайте о ручной проверке. /diff покажет, что изменилось, /plan поможет понять, как действовать до реализации, а /feedback позволит сообщить о качестве работы самого инструмента. Вместе эти команды формируют понятный цикл: спланировать, реализовать, увидеть изменения, проверить результат и улучшить процесс.

CIO-NAVIGATOR