Гид SENAR: Чеклист ревью AI-вывода

ПРИМЕЧАНИЕ — Соотношение с SENAR Core

SENAR Core содержит обновлённый Чеклист верификации (28 пунктов, 3 уровня: Standard / High / Critical), который заменяет данный чеклист для команд, использующих Core.

Соответствие уровней: Tier 1 (этот гид) ≈ Standard (Базовая) (Core) | Tier 2 ≈ High | Tier 3 ≈ Critical

Данный чеклист Гида сохраняется для команд, осваивающих SENAR через Standard (командная точка входа) и ещё не перешедших на Core. Если ваша команда использует SENAR Core — применяйте Чеклист верификации из Core.

ПРИМЕЧАНИЕ — Статус этого чеклиста относительно Стандарта

Настоящий чеклист информативен. Он не является нормативным требованием на QG-3, и никакое заявление о соответствии на нём не держится.

Нормативный пол — Standard 8.4, Минимальные критерии проверки AI-вывода: пять проверок, которые ОБЯЗАНЫ выполняться на QG-3. Standard 8.4 прямо говорит, что эти критерии заменяют зависимость от настоящего чеклиста: от организации требуется выполнить пять проверок, а не принять этот документ. Само это различие нигде не было сказано там, где его увидел бы читатель этой главы, и глава читалась так, будто обязанностью является проставить галочки.

Пять критериев здесь покрыты, и вот соответствие:

Standard 8.4 (ОБЯЗАТЕЛЬНО на QG-3)Пункты настоящего чеклиста
a) Проверка галлюцинаций — нет несуществующих API, методов, флагов CLI24
b) Проверка зависимостей — импорты присутствуют в манифесте3, 4
c) Соответствие паттернам — следование архитектуре и конвенциям проекта6, 7, 12, 20
d) Состоятельность тестов — тесты проверяют критерии приёмки, а не только покрытие8, 9
e) Проверка секретов — нет захардкоженных учётных данных, ключей, секретов5, 10

Всё остальное здесь лежит выше пола и предлагается как подспорье, а не как требование. Два следствия стоит назвать прямо: прогон всех 24 пунктов сам по себе не удовлетворяет 8.4, если каждая из пяти проверок не была фактически выполнена и зафиксирована; и команда, которой этот список длинен, вправе свести его к пяти, не опустившись ниже Стандарта.

При ревью 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Область коммитаКоммит атомарный и сфокусированный, или свалка всего подряд?
14Null-guard перед сравнениемNone == None — это True в Python (JS: null === null — true; в большинстве языков есть аналогичные ловушки null-равенства) — проверки доступа обходятся, когда обе стороны null?
15Обход через пустой конфигПроверка безопасности пропускается, когда значение конфига — пустая строка? (if secret and ... проваливается в открытое состояние)
16Доверие заголовкамX-Forwarded-For, X-Partner-ID, Content-Length используются для безопасности без валидации прокси?
17IDORРесурс доступен по ID без проверки прав пользователя на этот ресурс? Аутентификация != авторизация.
18Шорткат return TrueФункция контроля доступа возвращает True / предоставляет доступ без явной проверки владения?
19Инъекция через форматирование строкstr.format(**untrusted_dict) — Python format поддерживает доступ к атрибутам, что позволяет инъекцию (JS: шаблонные литералы с eval(); C/C++: форматные строки printf; любой язык: строковая интерполяция с непроверенными данными)
20God-функции/файлыФункции >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); любой язык: десериализация непроверенных данных без валидации)
24Фантомные APIСуществуют ли вызываемые функции, методы, поля и флаги CLI в той версии библиотеки, фреймворка или инструмента, которая используется? Отличается от пункта 3: пакет может быть в манифесте, а вызов в него — выдуман. Сигнатуры галлюцинируются охотнее, чем имена пакетов, и правдоподобная проходит ревью именно потому, что выглядит правильно, — сверяйте с документацией установленной версии или выполнением, а не с памятью

Уровни приоритета

Уровни ниже говорят, сколько пунктов списка прогонять и когда. Они не управляют Standard 8.4: пять критериев из соответствия выше выполняются на QG-3 для каждой задачи, к какому бы уровню она ни относилась. Часть пунктов, на которых эти критерии держатся, лежит здесь на уровнях 2 и 3 — 8.4(b) на пункте 4, 8.4(c) на 6, 7, 12 и 20, 8.4(e) на 5 и 10, — и уровень говорит, когда настоящий Гид предлагает читать пункт, а не то, применяется ли критерий Стандарта.

Уровень 1 — Проверять всегда (каждая задача): Пункты 1–3 (область изменений, удаления, фантомные импорты), 24 (фантомные API) и 8–9 (качество тестов, подмена тестов). Они отлавливают самые частые и самые опасные дефекты AI. Проверка 6 пунктов занимает пару минут.

Уровень 2 — Задачи, связанные с безопасностью (авторизация, платежи, данные, API): Пункты 10 (безопасность), 14–18 (null-guard, пустой конфиг, доверие заголовкам, IDOR, return True). Они отлавливают латентные дефекты — AI-вывод, который выглядит корректно, но ломается при враждебных условиях. Выявлены через состязательный аудит продакшен-кода, сгенерированного AI.

Уровень 3 — Глубокое ревью (сложные задачи, вывод агентов): Все оставшиеся пункты (4–7, 11–13, 19–23). Применяйте при ревью сложных фич, рефакторингов или любого вывода от диспетчеризованных агентов (Rule 15 L3).

Использование

Распечатайте этот список. Используйте его на QG-2 (шлюз реализации) для каждой задачи. Со временем часть проверок станет автоматической привычкой — но держите список на виду для новых Супервайзеров.