Перейти к основному содержимому

Шаг 3 — решения и проверки

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

Слева задания с точкой состояния, в центре отчёт, справа инспектор с итогами прогона.
отчёт заданияСлева задания с точкой состояния, в центре отчёт, справа инспектор с итогами прогона.

Что происходит при прогоне

Три решения независимо

Задание решается трижды: одна модель, другой промпт, вторая модель. Если результаты расходятся на одних и тех же данных — формулировка допускает два прочтения, и это дефект задания, а не решения. Статус решения разошлись — формулировка двусмысленна.

Спека данных и варианты

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

Эталон по всем вариантам

Эталонное решение прогоняется на каждом варианте, результат нормализуется и запоминается: для select — строки и хэш, для dml — состояние таблиц, для ddl — снимок схемы.

Гейт инвариантов

Проверки прогоняются на самом эталоне (должны пройти все) и на негативных решениях (каждое должно быть чем-то поймано). Не сошлось — задание получает статус проверки не сошлись и в готовые не попадает.

Статусы задания в списке и в инспекторе:

СтатусЧто это значит
все проверки пройденызадание готово ехать студентам
решения разошлись — формулировка двусмысленнапереформулируйте задание на шаге 2
проверки не сошлисьнабор проверок не ловит то, что должен; нужен переген
не удалось описать данные — нужен перегенспека данных невалидна или невыполнима

Отчёт задания

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

Отчёт

Проверка однозначности (три решения рядом), правильное решение с подсветкой, правильный результат на открытых примерах и таблица «типичные ошибки студентов — какая проверка их ловит».

Варианты данных

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

Каждый вариант с квотами по классам строк; раскрытие показывает данные и ожидаемый результат.
вкладка «варианты данных»Каждый вариант с квотами по классам строк; раскрытие показывает данные и ожидаемый результат.
Первое раскрытие медленное

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

Проверки

Полный список проверок задания: тип, открытая или скрытая, параметры. Открытые проверки студент видит по именам, скрытые существуют только на бэкенде.

Все проверки задания с параметрами: что именно сравнивается на каждом варианте.
вкладка «проверки»Все проверки задания с параметрами: что именно сравнивается на каждом варианте.

Негативные решения

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

Каждый негатив с чипами пойманных проверок; «ничем не поймано» — дыра в проверках.
вкладка «негативные решения»Каждый негатив с чипами пойманных проверок; «ничем не поймано» — дыра в проверках.

Негатив без единого чипа помечен как дыра: значит, студент, сделавший ровно эту ошибку, получит зачёт. Такое задание нужно перегенерировать или дописать ему проверку вручную.

Инспектор

Правая колонка держит итоги прогона на виду, пока вы листаете вкладки: статус, сколько вариантов данных и сколько среди них открытых, число проверок и негативов, список проверок с пометкой «скрытая», покрытие ошибок построчно. Скрывается кнопкой «Скрыть инспектор» — на узком экране прячется сам.

Отчёт приёмки

Помимо интерфейса конвейер пишет report/index.md в паке. Это тот же материал в виде файла — его удобно читать в мердж-реквесте, когда паки живут в git и правки к практике проходят ревью.