Why did my Canvas due date disappear?

An assignment can leave your Canvas To Do list without being done, and without anyone changing it. The list only reaches one week ahead. It hides work that is locked, whether it has closed or not yet opened. Work done on paper or in an outside tool drops off once its due date passes. Work with no due date never appears. A course that has concluded stops feeding the list, and an item you dismissed stays dismissed. Your instructor may also have removed or unpublished it. Each cause is below, with what to check.

What you see

Yesterday the assignment was on your To Do list. Today it is not, and you have not submitted anything. Or it was never there at all, and you only found out about it from a classmate or the syllabus. Canvas shows no message in either case. An item leaving the list looks the same as an item you finished.

The causes

It is more than a week away. The To Do list covers a window from four weeks back to one week ahead. An assignment due in ten days is not missing; it has not come into the window yet. See the to-do list only shows the next 7 days.

It is locked. Canvas leaves locked work off the list, and an assignment counts as locked both before its "Available from" date and after its "Available until" date. A quiz that closed overnight leaves no trace. See locked assignments leave your to-do list.

It is done on paper or in an outside tool, and the due date has passed. Work with no online submission, or one submitted through an external tool (New Quizzes included), stays on the list only until its due date, whether you did it or not. See overdue offline assignments disappear.

It has no due date. The list chooses work by due date, and an assignment without one never falls in its range. Canvas files it under Undated. See assignments with no due date never reach your to-do list.

The whole course is missing from your dashboard. If you have starred any course, the dashboard shows only starred courses, and a new term's course can be hidden behind last term's stars. See why courses go missing from your dashboard.

The course has concluded. The To Do list draws only on courses where you are currently an active student. When a course ends, by its own end date, the term's, or because it was concluded, your enrollment in it stops counting as active, and its remaining work leaves the list. This cause has no entry of its own yet; the evidence is below.

You dismissed it. Canvas lets you hide an item from your To Do list, and it records that for you. The list leaves out anything you have hidden, and in the source it does not matter whether you hid it once or permanently. Canvas's API reference says a plain dismissal lasts "until the item changes". In the code we read, what removes it is a submission from you or your instructor excusing you; we found nothing that removes it when the due date moves. We have not tested that case. This cause has no entry of its own yet; the evidence is below.

Your instructor removed or unpublished it. Students see only published assignments. If an assignment is gone from the course's Assignments page too, ask your instructor whether it was taken down on purpose.

What you can check

What an instructor or admin can do

This is one reason Margin does not treat an item leaving a feed as evidence it was done — absence is not completion, and closing a task requires a positive per-user signal.

Evidence

canvas-lms, app/controllers/users_controller.rb:974-980 (master at 1c9f0bb, retrieved 2026-11-01). The todo_items action behind the To Do list asks for work to submit with concluded courses left out:

submitting_scope = @current_user
                   .assignments_needing_submitting(
                     include_ungraded: true,
                     scope_only: true,
                     course_ids: submitting_course_ids,
                     include_concluded: false
                   )

canvas-lms, app/models/user_learning_object_scopes.rb:70-76, inside course_ids_for_todo_lists, which chooses the courses the list draws on:

result = if include_concluded
           all_course_ids
         else
           case permission_type
           when :student
             participating_student_course_ids

canvas-lms, app/models/user.rb:2604-2607. Those are your student enrollments that are current and active by date:

def participating_student_course_ids
  cached_course_ids("participating_student") do |enrollments|
    enrollments.current.active_by_date.where(type: %w[StudentEnrollment StudentViewEnrollment])
  end

active_by_date (app/models/enrollment.rb:1433) requires an enrollment state of active. app/models/enrollment_state.rb sets that state to completed when the course is completed (:121-123) and when its end date has passed (:186-187, under the comment "we've past the end date").

canvas-lms, app/controllers/users_controller.rb:922-927, the API's own description of the dismiss links on each to-do item: "Performing a DELETE request against the ignore URL will hide that item from future todo item requests, until the item changes. Performing a DELETE request against the ignore_permanently URL will hide that item forever."

canvas-lms, app/models/user_learning_object_scopes.rb:40-45. Hiding an item writes a record for you, with a flag for whether it is permanent:

asset.ignores.upsert(
  { user_id: id, purpose:, permanent: },
  unique_by: %i[asset_id asset_type user_id purpose],
  update_only: :permanent
)

canvas-lms, app/models/user_learning_object_scopes.rb:187 applies the filter to the to-do scope, and app/models/abstract_assignment.rb:3486-3491 defines it. It looks for any record for that user and purpose, and does not read the permanent flag:

scope = scope.not_ignored_by(self, purpose) unless include_ignored
scope :not_ignored_by, lambda { |user, purpose|
  where.not(Ignore.where(asset_type: "Assignment",
                         user_id: user,
                         purpose:).where("asset_id=assignments.id")
                     .arel.exists)
}

canvas-lms, app/models/submission.rb:3099-3101, delete_ignores, runs after every save of a submission (:505). When the submission has a submission type, meaning you submitted, or you have been excused, it deletes your submitting record for that assignment. app/models/quizzes/quiz_submission.rb:916-918 does the same for a completed Classic Quiz. The other deletions of non-permanent records (for example app/models/course.rb:3021, app/models/submission.rb:3104, app/models/moderated_grading/provisional_grade.rb:78) are for teachers' grading items, and Ignore.cleanup (app/models/ignore.rb:28-55) removes records only for deleted assignments or enrollments. We found no deletion tied to a change of due date.