assert(taskPage.includes('import { listClassTrainingTasks } from "@/api/trainingTask";'),"task allocation must import the class-scoped training task source");
assert(/tasks\.value = \[\];\s+const res = await listClassTrainingTasks/.test(taskPage),"class task loading must clear prior class rows before requesting the selected class");
assert(taskPage.includes("function sortTasksWithComprehensiveLast(taskList)"),"task allocation must normalize task order after loading");
assert(taskPage.includes("tasks.value = sortTasksWithComprehensiveLast(res.data || []);"),"task allocation must render comprehensive training after every other task");
assert((taskPage.match(/if \(!isActiveLoad\(requestedClassId, requestGeneration\)\) return/g)||[]).length>=2,"stale class requests must not update task rows or publication selection");
assert(taskPage.includes("let activeLoadGeneration = 0;"),"overlapping class loads must use a shared generation");
assert(taskPage.includes("const requestGeneration = ++activeLoadGeneration;"),"each class load must advance the active generation");
assert(taskPage.includes("if (requestGeneration === activeLoadGeneration) loading.value = false;"),"only the active class load may clear the loading indicator");
assert(taskPage.includes("let selectionSyncGeneration = -1;"),"programmatic selection synchronization must be tracked");
assert(taskPage.includes("if (selectionSyncGeneration === activeLoadGeneration) return;"),"programmatic table selection events must not overwrite task keys");
assert(/tasks\.value\s+\.filter\(\(task\) => task\.taskKey !== comprehensiveTaskKey\)\s+\.map\(\(task\) => task\.taskKey\)/.test(taskPage),"an unconfigured class must keep comprehensive training unpublished until the teacher explicitly selects it");