POST /api/instructor/v2/courses/<key>/reports/<type>/generate (GenerateReportView) answers 200 {"status": "<localized sentence>"} with no task_id, while the other task-queuing v2 views (certificate regenerate, the grading writes via _build_async_response) return {task_id, status_url, ...}.
GET /api/instructor/v2/courses/<key>/instructor_tasks without problem_location_str falls through to get_running_instructor_tasks, so it lists only tasks still running. A finished task, a task that never ran, and a task that failed (see #39119) all leave it empty. GET …/tasks/<task_id> exists, but nothing hands out the id for a report.
Impact: a client cannot correlate a report request to its task, or read a failure reason. The Data Downloads UI and any automation can only infer completion by waiting for a new file to appear in the downloads listing; a failed report simply never shows up.
Expected: have the _generate_*_report handlers return the submitted InstructorTask and answer {task_id, status_url} from generate, as _build_async_response already does for the grading writes. Optionally, let instructor_tasks include recently finished tasks (or accept a task_type filter backed by get_instructor_task_history) so a failure stays visible after the task ends.
Environment: confirmed in lms/djangoapps/instructor/views/api_v2.py on master @ 6056c143d2 (2026-10-05); first observed on Tutor main with frontend-app-instructor-dashboard v2.0.0-alpha, 2026-09-15.
Found by the Open edX end-to-end test suite (INSTR-002).
POST /api/instructor/v2/courses/<key>/reports/<type>/generate(GenerateReportView) answers200 {"status": "<localized sentence>"}with notask_id, while the other task-queuing v2 views (certificateregenerate, the grading writes via_build_async_response) return{task_id, status_url, ...}.GET /api/instructor/v2/courses/<key>/instructor_taskswithoutproblem_location_strfalls through toget_running_instructor_tasks, so it lists only tasks still running. A finished task, a task that never ran, and a task that failed (see #39119) all leave it empty.GET …/tasks/<task_id>exists, but nothing hands out the id for a report.Impact: a client cannot correlate a report request to its task, or read a failure reason. The Data Downloads UI and any automation can only infer completion by waiting for a new file to appear in the downloads listing; a failed report simply never shows up.
Expected: have the
_generate_*_reporthandlers return the submittedInstructorTaskand answer{task_id, status_url}fromgenerate, as_build_async_responsealready does for the grading writes. Optionally, letinstructor_tasksinclude recently finished tasks (or accept atask_typefilter backed byget_instructor_task_history) so a failure stays visible after the task ends.Environment: confirmed in
lms/djangoapps/instructor/views/api_v2.pyonmaster@6056c143d2(2026-10-05); first observed on Tutormainwithfrontend-app-instructor-dashboardv2.0.0-alpha, 2026-09-15.Found by the Open edX end-to-end test suite (
INSTR-002).