Шаг 3 — решения и проверки
Самый долгий шаг: на каждое задание генерируются эталонное решение, спека данных, варианты, набор проверок и намеренно неверные решения. Всё это исполняется на настоящем Postgres — то, что попало в пак, уже прогонялось.

Что происходит при прогоне
Задание решается трижды: одна модель, другой промпт, вторая модель. Если результаты расходятся на одних и тех же данных — формулировка допускает два прочтения, и это дефект задания, а не решения. Статус решения разошлись — формулировка двусмысленна.
Модель описывает, какие бывают классы строк и какие крайние случаи обязаны существовать. Дальше данные строит движок: систематические крайности плюс случайные комбинации квот, обычно около полусотни вариантов. Три из них — именованные открытые примеры.
Эталонное решение прогоняется на каждом варианте, результат нормализуется и запоминается: для select — строки и хэш, для dml — состояние таблиц, для ddl — снимок схемы.
Проверки прогоняются на самом эталоне (должны пройти все) и на негативных решениях (каждое должно быть чем-то поймано). Не сошлось — задание получает статус проверки не сошлись и в готовые не попадает.
Статусы задания в списке и в инспекторе:
| Статус | Что это значит |
|---|---|
| все проверки пройдены | задание готово ехать студентам |
| решения разошлись — формулировка двусмысленна | переформулируйте задание на шаге 2 |
| проверки не сошлись | набор проверок не ловит то, что должен; нужен переген |
| не удалось описать данные — нужен переген | спека данных невалидна или невыполнима |
Отчёт задания
Четыре вкладки. Первая — сводка, три остальные показывают всё содержимое материализации без сокращений.
Отчёт
Проверка однозначности (три решения рядом), правильное решение с подсветкой, правильный результат на открытых примерах и таблица «типичные ошибки студентов — какая проверка их ловит».
Варианты данных
Все варианты со своими квотами по классам и ожидаемым результатом. Открытые примеры — карточками с таблицей результата, скрытые — строками таблицы, любая раскрывается по кнопке: студия достаёт данные варианта из эфемерной базы.

Под варианты студия поднимает эфемерный Postgres и держит его на время процесса. Первый запрос ждёт старта контейнера (около сорока секунд), следующие отвечают мгновенно.
Проверки
Полный список проверок задания: тип, открытая или скрытая, параметры. Открытые проверки студент видит по именам, скрытые существуют только на бэкенде.

Негативные решения
Намеренно неверные запросы и то, какие проверки их поймали.

Негатив без единого чипа помечен как дыра: значит, студент, сделавший ровно эту ошибку, получит зачёт. Такое задание нужно перегенерировать или дописать ему проверку вручную.
Инспектор
Правая колонка держит итоги прогона на виду, пока вы листаете вкладки: статус, сколько вариантов данных и сколько среди них открытых, число проверок и негативов, список проверок с пометкой «скрытая», покрытие ошибок построчно. Скрывается кнопкой «Скрыть инспектор» — на узком экране прячется сам.
Отчёт приёмки
Помимо интерфейса конвейер пишет report/index.md в паке. Это тот же материал в виде файла — его удобно читать в мердж-реквесте, когда паки живут в git и правки к практике проходят ревью.