Шаг 2 — задания
Формулировки заданий по утверждённой предметной области. Пока область не утверждена, шаг сообщит об этом вместо формы — задания генерируются по её DDL.

Что содержит задание
| Поле | Зачем |
|---|---|
title | короткое имя в списках |
business_statement | что видит студент первым: бизнес-формулировка без имён таблиц и колонок |
statement | точная техническая формулировка; по ней строятся проверки, студенту доступна как подсказка |
kind | select, dml или ddl — определяет, что вообще сравнивать |
objectives | темы курса, которые задание закрывает |
difficulty | 1–3, показывается студенту засечками |
require_constructs | конструкции, которые обязаны быть в решении |
forbid_constructs | конструкции, которых быть не должно |
Две формулировки — не дублирование. Студент читает бизнес-версию и сам решает, какие таблицы для этого нужны; техническая раскрывается кнопкой «Подсказка» и остаётся источником правды для проверок. Править бизнес-формулировку можно свободно: она исключена из source_hash, поэтому материализации от этого не устаревают.
Требуемые и запрещённые конструкции
Так задание удерживается в теме занятия. «Без агрегатов» на первой лекции, «через JOIN, а не подзапрос» на четвёртой. Проверка sql_constraints разбирает решение как SQL: обойти требование DISTINCT через GROUP BY не получится.
Покрытие тем
До утверждения студия сверяет, сколько заданий закрывает каждую тему, с квотами из шага 1:
| Тема | Заданий | Нужно | |
|---|---|---|---|
| Простые SELECT и WHERE | 3 | 2–3 | покрыто |
| Вариации SELECT и WHERE | 5 | 6–8 | не хватает |
Пока в таблице есть непокрытые темы, кнопки утверждения нет. Варианты действий: перегенерировать задания, ослабить квоты на шаге 1 или дописать задания вручную через ручной режим.
Утверждение
«Утвердить задания» фиксирует хэш набора заданий и хэш области, к которой он собран. Если область потом изменится, задания получат пометку «устарели» с причиной — работать дальше с ними студия не даст.