@ -12,6 +12,8 @@ assert(taskPage.includes("listClassTrainingTasks"), "task allocation must use tr
assert(taskPage.includes("listClassTrainingTasks"),"task allocation must load training tasks for the selected teaching class");
assert(taskPage.includes("await listClassTrainingTasks(classId.value, { enabledOnly: false })"),"class task loading must request disabled and enabled tasks");
assert(taskPage.includes("tasks.value = [];\n const res = await listClassTrainingTasks"),"class task loading must clear prior class rows before requesting the selected class");
assert((taskPage.match(/const requestedClassId = classId\.value;/g)||[]).length>=2,"task and publication loading must capture the requested class");
assert((taskPage.match(/if \(classId\.value !== requestedClassId\) return;/g)||[]).length>=2,"stale class requests must not update task rows or publication selection");
assert(taskPage.includes("getTaskPublication"),"task allocation must load the selected class publication state");
assert(taskPage.includes("tasks.value.map((task) => task.taskKey)"),"an unconfigured class must default to all tasks selected");
assert(taskPage.includes("保存发布配置"),"task allocation must require an explicit save");