Гид SENAR: Чеклист ревью AI-вывода
ПРИМЕЧАНИЕ — Соотношение с SENAR Core
SENAR Core содержит обновлённый Чеклист верификации (26 пунктов, 3 уровня: Standard / High / Critical), который заменяет данный чеклист для команд, использующих Core.
Соответствие уровней: Tier 1 (этот гид) ≈ Standard (Базовая) (Core) | Tier 2 ≈ High | Tier 3 ≈ Critical
Данный чеклист Гида сохраняется для команд, осваивающих SENAR через Standard (командная точка входа) и ещё не перешедших на Core. Если ваша команда использует SENAR Core — применяйте Чеклист верификации из Core.
При ревью AI-сгенерированного вывода проверяйте эти специфичные для AI проблемы.
Чеклист
| # | Проверка | На что обращать внимание |
|---|---|---|
| 1 | Область изменений | AI изменил файлы за пределами области задачи? (самая частая ошибка AI) |
| 2 | Удаления | AI молча удалил или подменил существующий рабочий код? |
| 3 | Фантомные импорты | Все импортированные пакеты указаны в файле зависимостей? |
| 4 | Версии зависимостей | Указанные версии реально существуют и опубликованы? |
| 5 | Захардкоженные значения | Магические числа, URL-адреса, учётные данные, API-ключи в коде? |
| 6 | Переусложнение | Ненужные абстракции, паттерны или обобщения? |
| 7 | Дублирование | Новый код дублирует существующие утилиты? |
| 8 | Качество тестов | Тесты проверяют поведение или просто зеркалят реализацию? |
| 9 | Подмена тестов | AI изменил тесты, чтобы они прошли, вместо исправления кода? |
| 10 | Безопасность | Открытый CORS, захардкоженные токены, SQL без параметризации? |
| 11 | Крайние случаи | Основной сценарий работает — а что с null, пустым значением, граничными условиями, конкурентным доступом? |
| 12 | Именование | AI следует конвенциям именования проекта? |
| 13 | Область коммита | Коммит атомарный и сфокусированный, или свалка всего подряд? |
| 14 | Null-guard перед сравнением | None == None — это True в Python (JS: null === null — true; в большинстве языков есть аналогичные ловушки null-равенства) — проверки доступа обходятся, когда обе стороны null? |
| 15 | Обход через пустой конфиг | Проверка безопасности пропускается, когда значение конфига — пустая строка? (if secret and ... проваливается в открытое состояние) |
| 16 | Доверие заголовкам | X-Forwarded-For, X-Partner-ID, Content-Length используются для безопасности без валидации прокси? |
| 17 | IDOR | Ресурс доступен по ID без проверки прав пользователя на этот ресурс? Аутентификация != авторизация. |
| 18 | Шорткат return True | Функция контроля доступа возвращает True / предоставляет доступ без явной проверки владения? |
| 19 | Инъекция через форматирование строк | str.format(**untrusted_dict) — Python format поддерживает доступ к атрибутам, что позволяет инъекцию (JS: шаблонные литералы с eval(); C/C++: форматные строки printf; любой язык: строковая интерполяция с непроверенными данными) |
| 20 | God-функции/файлы | Функции >50 строк, файлы >400 строк — главный признак нерефакторенного AI-вывода |
| 21 | Недостижимый защитный код | return False после исчерпывающей обработки исключений — AI добавил «на всякий случай», но код никогда не выполнится |
| 22 | Проглоченные исключения | Блоки catch/except, которые отбрасывают ошибки (except Exception: pass, catch(e) {}, или логирование на уровне debug) — скрывают реальные сбои. Проверяйте возврат null/None/nil, маскирующий ошибочные состояния |
| 23 | Небезопасная десериализация | pickle.loads, yaml.load без SafeLoader, eval/exec на непроверенных данных, JSON prototype pollution? (Java: ObjectInputStream; JS: eval(JSON); любой язык: десериализация непроверенных данных без валидации) |
Уровни приоритета
Уровень 1 — Проверять всегда (каждая задача): Пункты 1–3 (область изменений, удаления, фантомные импорты) и 8–9 (качество тестов, подмена тестов). Они отлавливают самые частые и самые опасные дефекты AI. Проверка 5 пунктов занимает менее 2 минут.
Уровень 2 — Задачи, связанные с безопасностью (авторизация, платежи, данные, API): Пункты 10 (безопасность), 14–18 (null-guard, пустой конфиг, доверие заголовкам, IDOR, return True). Они отлавливают латентные дефекты — AI-вывод, который выглядит корректно, но ломается при враждебных условиях. Выявлены через состязательный аудит продакшен-кода, сгенерированного AI.
Уровень 3 — Глубокое ревью (сложные задачи, вывод агентов): Все оставшиеся пункты (4–7, 11–13, 19–23). Применяйте при ревью сложных фич, рефакторингов или любого вывода от диспетчеризованных агентов (Rule 15 L3).
Использование
Распечатайте этот список. Используйте его на QG-2 (шлюз реализации) для каждой задачи. Со временем часть проверок станет автоматической привычкой — но держите список на виду для новых Супервайзеров.