In a world where course teams change content, including removing/adding blocks, the following options allow learners to see different snapshots (versions) of the course content based on which version they initially interacted with, and thus, locked in.

Option 1. Expose versions from the modulestore and access version-specific data

Note: This is the most preferred option since it makes use of the versioning technology inherently available and using it for the purpose it was originally built.

Option 2. For each graded subsection, store required information of all scored sub-components, and only soft-delete blocks

Note: This option is proposed in case Option 1 is determined as not possible.  However, it's not ideal as it requires duplicating subsections' subtree data and maintaining that additional storage.

Option 3. Prevent addition/removal of blocks in a live course

Note: This is not an ideal option for the long-term since editing of content in self-paced courses is required.