59ae4c1dea
Тренажёр-по-темам и практика брали FROM exam_tasks без фильтра по варианту — в пул попадали год-пачки (variant=год≥2011) и variant=0, которые ДУБЛИРУЮТ выверенные варианты-пробники (51 дубль чистый↔пачка, 20 через variant=0). Ученик мог получить одну задачу дважды. Добавлен фильтр variant BETWEEN MV_LO..MV_HI (тот же [101;1999], что у пикера) во все 7 запросов выборки/счёта задач: practiceRandom, practiceUnsolved, topicTasksUnsolved, topicTasksAny, listTopicsWithCounts (счётчик подтем), weakBatchTasks, pickRandomByDifficulty (×2). Хелперы MV_LO/MV_HI (для math9 без диапазона — всё, кроме variant=0). Результат: практика ctmath = только варианты 101–117 (496 задач, 0 дублей между собой), год-пачки (714 задач) остаются в БД для возможного будущего, но не показываются. Обратимо, без удаления данных. Рантайм-проверка: 5 эндпоинтов практики/тем → 200. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>