Почему нужен чеклист?
Когда я только начал использовать инструменты искусственного интеллекта для разработки, первый месяц был настоящим испытанием. Я отправлял код, который выглядел правильно, компилировался корректно, но всё равно ломал авторизацию или другие важные функции из-за упущенных крайних случаев.
После нескольких часов отладки я понял, что нужно изменить подход. Вместо того чтобы просить ИИ «создавать фичи», я решил использовать его как быстрого рецензента моего кода. Это привело меня к созданию чёткого чеклиста, который я выполняю каждый раз перед тем, как слить изменения в основную ветку.
Шаг №1: Используем Claude для анализа изменений
Первым шагом является использование модели Claude для проверки изменений. Важно не давать ей весь файл целиком, так как это может привести к тому, что она начнёт фантазировать контекст. Лучше всего предоставить именно разницу между версиями (git diff), чтобы модель вела себя как настоящий рецензент.
В Cursor я выделяю нужный кусок diff и задаю вопрос примерно такого содержания:
"Проверь этот diff. Найди баги, пропущенные случаи, предложи тесты. Не переписывай стиль".
Кроме того, полезно задать структуру вывода, иначе ответ будет слишком длинным и расплывчатым. Вот шаблон запроса, который я сохраняю в виде сниппета и буквально вставляю при необходимости:
You are reviewing a PR diff.
Rules:
- Focus on correctness, edge cases, security, and performance.
- Call out any behavior change.
- If you suggest a fix, show the minimal patch.
- Suggest at least 2 test cases.
- Don't suggest refactors unless required for correctness.
Input:
Output format:
1) High-risk issues (with line refs)
2) Medium-risk issues
3) Tests I should add
4) Minimal patch (only if needed)
Если проект использует строгий режим TypeScript, важно указать это явно, например:
Project: TypeScript "strict": true. Runtime: Node 20.
Таким образом, мы получаем структурированный отчёт о возможных проблемах и тестах, которые стоит добавить.
Шаг №2: Локальный скрипт CI
Следующий шаг — запуск локального скрипта непрерывной интеграции. Он выполняет все необходимые проверки автоматически, избавляя меня от необходимости помнить команды вручную.
Вот пример простого сценария для проекта на основе Next.js и TypeScript:
#!/usr/bin/env node
import { execSync } from 'child_process';
const commands = [
'yarn install', // Установка зависимостей
'yarn tsc --noEmit', // Проверка типов
'yarn lint', // Линтинг
'yarn test', // Запуск тестов
];
commands.forEach((cmd) => {
try {
console.log(`Running ${cmd}`);
execSync(cmd, { stdio: [0, 1, 2], encoding: 'utf8' });
} catch (err) {
console.error(err);
process.exit(1);
}
});
console.log('All checks passed.');
process.exit(0);
Этот сценарий проверяет зависимости, типы, форматирование и запускает тесты. Если хотя бы одна проверка провалится, процесс остановится, и слияние не произойдёт до исправления ошибок.