[Self-Hosted] Module Progressions recursively corrupting (Completed with Requirements not met) after Upgrade

85 views
Skip to first unread message

Anand Srinivasan

unread,
Jan 5, 2026, 12:04:00 PMJan 5
to Canvas LMS Users

Hi everyone,

We manage a self-hosted Canvas instance and recently performed a major upgrade to [release/2025-03-12.361]. We are facing a persistent issue where Module Progressions are incorrectly marking students as Completed despite having met zero requirements.

The Symptoms:

  1. A student interacts with a module (viewing/submitting).

  2. The context_module_progressions record updates to:

    • workflow_state: 'completed'

    • requirements_met: [] (Empty Array)

    • This happens even though the Module definitely has active completion_requirements in the DB.

What we have verified:

  • Integrity: The context_modules table has correct completion_requirements. All content tags exist and are published.

  • The Fix Fails: We ran a script to destroy the corrupt progression records. This fixes the issue temporarily (status resets to Locked/Started). However, as soon as students interact with the course again, a percentage of records revert to the corrupt state.

  • Strict Logic: We verified via Rails Console that progression.evaluate_requirements should be returning 'started' or 'unlocked', yet the record is being saved as 'completed'.

Environment:

  • Canvas Version: [release/2025-03-12.361], same as [origin/stable/2025-03-12]

  • Database: PostgreSQL 14

  • OS: Ubuntu 24

It behaves as if the calculator sees the requirements as null during the write operation.

Any help on this is appreciated!


Thanks,
Anand

Anand Srinivasan

unread,
Jan 14, 2026, 1:23:38 AMJan 14
to Canvas LMS Users
There are all kinds of wrong course progression states: False Unlocks, False completes, etc. The problem is that canvas thinks it's up to date (current flag is set to true in DB). Is this an error in the [release/2025-03-12.361] build? Or a potential runtime configuration problem like delayed jobs?

Any pointers, please.. to help us process this in the right direction
Reply all
Reply to author
Forward
0 new messages