Maple

The Maple master branches were created on Oct 15, 2021. Changes on master should no longer be noted here. Put them on Nutmeg instead.

 

 

The 13th Open edX community release will be named Maple. It will be released December 20th, 2021. The maple.master branches will be created two months earlier, on October 9th. Code on master as of October 9th will be part of Maple. Code merged after that will need special handling to be part of Maple.

Put stuff here that we have to remember when we start packaging up for Maple.  Especially important is information that system installers or operators will need to know. Please include your name when you add an item, so that we can get back to you with questions.

Operational

  • Impeding Breaking Changes (Dec 2021): @Julia Eskew (Deactivated) @Connor Haugh (Deactivated)

    • The current LTI Component XBlock provides an option to "View resource in a New Window", which uses JS to launch a new window/tab. Our ORA XBlock opens modals via JS. These capabilities were removed in Chrome v92. Chrome provided a temporary work-around which we now use. The current work-around might cease to work on Dec 14th, 2021, but has been slated to continue until January 2022. A longer term fix is prioritized, and should make its way into Maple. Just want to flag this to make sure it gets included.

  • Studio login changed to OAuth: @Tim McCormack

    • Studio previously shared a session cookie with LMS, and redirected to LMS for login. Studio is changing to become an OAuth client of LMS, using the same SSO configuration that other IDAs use. (See ARCHBOM-1860; OEP-42.)

    • This is a breaking change; follow the Studio OAuth migration runbook as part of upgrading to Maple.

      • For devstack, run ./provision-ida-user.sh studio studio 18010

  • django-cors-headers version updgraded: @Awais Qureshi

    • django-cors-headers version upgraded to 3.2.0. CORS_ORIGIN_WHITELIST now requires URI schemes. You will need to update your whitelist to include schemes, for example from this: CORS_ORIGIN_WHITELIST = ["foo.com"] to CORS_ORIGIN_WHITELIST = ["https://foo.com"]

Feature Changes

Learning Micro-Frontend

The Learning MFE (including both “courseware” and the “course home”) is planned to be the default course experience in Maple.

The Nutmeg release will likely entirely drop support for Legacy (that is, LMS-rendered) course experience entirely.

Details:

  • Contact People

    • Courseware: @Kyle McCormick (Deactivated) @Julia Eskew (Deactivated) @Connor Haugh (Deactivated)

    • Course Home: @Michael Terry (Deactivated)

    • Special Exams: @Zach Hancock (Deactivated)

  • Configuration

    • The courseware.use_legacy_frontend and course_home.course_home_use_legacy_frontend Waffle flags can be toggled on (either globally or per-course-run) in order to revert to the Legacy (LMS Django-rendered) courseware experience.

    • The domain name for your learning MFE should be added to the CORS_ORIGIN_WHITELIST for ecommerce, discovery, lms, and studio.

  • Removed Features:

    • Entrance Exams are slated to be deprecated and are never enabled on the MFE. Attempting to start a course with an entrance exam on the MFE results in an error. https://openedx.atlassian.net/browse/TNL-7046?atlOrigin=eyJpIjoiMzA5Nzk1ZGNjODE5NGNlNzgxOWFhZTMwY2E4NzM2MGEiLCJwIjoiamlyYS1zbGFjay1pbnQifQ   Using the waffle flags to enable the legacy experience should enable their usage for the time being, but their deprecation is forthcoming.

    • Problemsets and videosequences, which are deprecated variations of the Sequence block will not render in the MFE: DEPR-151: Remove OLX `problemset` and `videosequence` as aliases to `sequential`Removed

    • Non-standard course hierarchies. Legacy courseware was willing to render some content that didn’t strictly follow that hierarchy, and that content will break in the MFE.

      This should only affect courses authored directly in OLX. Studio-authored courses already follow these hierarchy requirements. Essentially, courses must follow a stricter hierarchy in order to work in the MFE:

      • The direct children of the root Course block should be Section (aka Chapter) blocks.

      • The children of the Sections must be Subsections (aka Sequence) blocks. Each Subsection must be part of at most one Section.

      • Children of the Subsections should be “Unit-like” blocks (most commonly Verticals, but HTML/Problem/etc are okay too)

    • Course search is not (yet?) available in the new Learning MFE Course Outline.

  • Altered Features:

    • The ability for course authors to preview units in the learner experience before they are published will preview in the legacy experience, not the MFE. Work enabling preview using the MFE is anticipated.

    • According to the HTML standard, <script> and <iframe> tags are not self-closing; they must be closed with </script> and </iframe> tags. Legacy courseware incidentally corrected this error when it occurred in course content. MFE courseware does not do that correction. Course authors should update their courses to use well-formed HTML if they happened to rely on self-closing <script> or <iframe> tags.

    • Courses which use the course key pattern ORG/COURSE/RUN instead of the new pattern, course-v1:ORG+COURSE+RUN, are stored in our legacy storage service, Old Mongo, and will not be served by the new MFE. Instead they default to the legacy experience. But this pattern has been deprecated and will be removed.

    • Author-written JS inside a Custom Javascript Problem block which acts outside the boundary of a unit will fail. Problem blocks will no longer be able to modify other problem blocks or access any parent elements using javascript. The main use case is pulling in content from a students’ previous answers or state. This is still possible with the get_statefn attribute all within the iframe. Although this may remove some small pieces of custom functionality, it is in the interests of adhering to security protocols.

    • Course Navigation on the MFE and legacy experience will have minor differences.

      • The breadcrumbs displayed at the top of a page in the legacy experience were organized by Course -> Sequence -> Unit -> Content Block Title, but in the new MFE breadcrumbs only includes Course -> Sequence -> Unit. This removes visual clutter of having the same title repeated in a small space on the page.

      • the MFE does change the URL scheme from:

        LMS_BASE/courses/COURSE_KEY/courseware/SECTION_URLNAME/SEQUENCE_URLNAME/UNIT_INDEX?activate_block_id=COMPONENT_KEYto: LEARNING_MFE_BASE/course/COURSE_KEY/SEQUENCE_KEY/UNIT_KEY

    • If all content inside a unit should be invisible to a cohort, but the sequence or the unit is not hidden, learners may be able to still see the titles of the content on the course outline, as well as the title of the sequence which contains only what should be hidden content to that learner. This issue can be removed by setting the learning_sequences.use_for_outlines waffle flag to true

  • Maintained Features:

    • Features which remain functional within MFE courses, but still will be served by the legacy experience in Maple are:

      • The XBlock student view, as exposed via the unit iframe in MFE courseware

      • Static tabs (aka Custom Pages)

      • Discussions tab

      • Wiki tab

      • Teams tab

      • Notes tab

      • Instructor dashboard.

    • Special exams (timed and proctored) will be functional within the Learning MFE for MFE enabled courses.

  • Added Features:

    • Course outlines will now feature automatic effort estimates for subsections. Courses have to be republished before they show estimates, and all videos in the course must also have durations in edx-val.

    • There are some in-course celebrations of progress. A modal popup when a learner finishes their first section. And a 3-day streak celebration modal popup.

    • The end of a course now has its own landing page. It congratulates the learner and points them at what to do next (certificate status, other courses to pursue, etc)

  • Related Links:

Certificates

  • Various bug fixes and updates around course certificate generation (@crice (Deactivated), @Justin Hynes)

    • Removal of the allow_certificate field on the UserProfile model has been completed, and the column has been dropped (DEPR-140: Remove `allow_certificate` field of UserProfile model in edx-platformRemoved).

      • Note: if your UserProfile table has a lot of rows, the migration to drop the column could lock the table and necessitate a status page/downtime.

    • The temporary waffle flag certificates_revamp.use_allowlist has been removed, as testing during the rollout of this feature has been completed. All course runs now use the new allowlist behavior, which is described here.

    • Code to generate a new or update an existing course certificate has been consolidated (DEPR-155: Replace Course Certificates generation code in edx-platformRemoved ).

      • The temporary waffle flag certificates_revamp.use_updated has been removed, as testing during the rollout of this feature has been completed. All course runs now use the new consolidated course certificate behavior, which is described here.

      • Code to generate (create or update) PDF course certificates has been removed from edx-platform.

      • The fix_ungraded_certs, regenerate_user, resubmit_error_certificates, and ungenerated_certs management commands have been removed. In their place, please use the cert_generation command.

    • In an effort to be more inclusive, code referencing a Certificate Whitelist has been updated to instead refer to a Certificate Allowlist. The CertificateWhitelistmodel has been replaced by the CertificateAllowlistmodel (data was automatically copied over to the new model).

    • The management command named cert_whitelist has been removed. In its place, please use the Certificate Allowlist, which can be accessed from the Instructor tab on the course page in the LMS. (https://openedx.atlassian.net/browse/DEPR-156)

    • The Segment event edx.bi.user.certificate.generate will no longer emit from the courseware when self-generated certificate generation is attempted by a user. There was some overlap in this Certificate event with the edx.certificate.createdevent sent during certificate generation. A self-generated certificate event will have a generation_mode of self (versus batch for certificates generated automatically).

    • Removed use of the modulestore wherever possible in the certificates Django app of edx-platform. Changes include:

      • Using a course’s CourseOverview over retrieving course data from the modulestore

      • Supporting change: Update the list_with_level function in the Instructor Dashboard to accept a course-id over the entire course object (PR: 27646)

    • Removed the AUDIT_CERT_CUTOFF_DATE setting. Awarding Audit certificates will not be supported in V2 of Course Certificates (DEPR-159: Removal of AUDIT_CERT_CUTOFF_DATE settingRemoved).

    • Removed the openedx/core/djangoapps/certificates app by merging the single api.py file into lms/djangoapps/certificates.

      • All APIs functions have been been moved as is, so if you have any code in a third party repository that used this API, please point them to the new path. openedx/core/djangoapps/certificates/api.pylms/djangoapps/certificates/api.py

  • Removed backpopulate_program_credentials management command in place of an updated notify_credentials command (@Albert (AJ) St. Aubin (Deactivated) )

  • LTI Config Model URL has been updated

    • URL of the LTI Config Model has been updated. This configuration is used to enable LTI PII sharing per course.  The impact of this update is that anyone who has bookmarked the LTI Django Admin model will need to update their pointer.  The new model admin is available in studio admin at : “admin/lti_consumer/courseallowpiisharinginltiflag/”.

    • https://openedx.atlassian.net/browse/TNL-8524

Other

  • Studio: Course and library creation rights can now be granted on a per-organization basis.

    • Pull request: https://github.com/edx/edx-platform/pull/26616

    • Contact: @Farhaan Bukhsh @Kyle McCormick (Deactivated)

    • As before:

      • Controlled content creation rights feature must be enabled via the FEATURES['ENABLE_CREATOR_GROUP'] flag.

      • Creation rights are requested by new users on the Studio page.

      • Administrators handle requests by modifying records in the course_creators admin app: <STUDIO_ROOT>/admin/course_creators/coursecreator/

    • However, administrators will now have a new capability when granting access:

      • Admins may now uncheck “All Organizations”, and instead select one or more particular organizations from the list.

      • Users granted creation access in this manner will only be able to create courses or libraries under the specified organizations.

      • This change is backwards-compatible: existing creation right grants will continue to apply to all organizations, and “All Organizations” remains the default option when granting new rights.

      • However, administrators can safely modify the organization settings on existing creation right grants if they would like to retroactively use this feature.

Deprecations and Removals

Based on estimated dates 2021-04-09 to 2021-11-15

Deprecations

key summary type created updated due assignee reporter priority status resolution
Loading...
Refresh

Removals

key summary type created updated due assignee reporter priority status resolution
Loading...
Refresh

 

Related content

Connor Haugh (Deactivated)
August 16, 2021

rephrased, hopefully that makes more sense

 

Kyle McCormick (Deactivated)
August 16, 2021

Thanks, it’s making more sense, but I’m not 100% grokking it yet.

It sounds like there’s an interaction going on between Sequence, Unit, and perhaps sub-Unit settings, but I’m not clear on which settings matter, and what would be shown in the outline. I am also not sure what the old behavior was.

Julia Eskew (Deactivated)
August 18, 2021

Is there a guide written somewhere that maps all terminology we use for course structure to all the words we use for them? A guide would be so helpful for me, at least.

The way I understand/explain this:

  • In legacy couseware, all sections/subsections would be visible in the LMS. However, if all units within a subsection were hidden from a learner, that subsection would show a blank page.

  • In the MFE, subsections which contain only units which are hidden to the learner will not be visible in the LMS. The learning_sequences course outlines removes them.

Not 100% sure about this explanation though.

 

Connor Haugh (Deactivated)
August 18, 2021

@Julia Eskew (Deactivated) I believe you intended explanation fully, but in my testing I ran into this behavior, posted my testing to the #tnl-squad slack, and nobody commented on it so I assumed it was normal? I can repost my results to reproduce this behavior

Connor Haugh (Deactivated)
August 18, 2021
  1. Create user XX

  2. Enroll in demo course

  3. sign out of XX, sign in as edx@example, got to Studio for demo course

  4. create a section "section1", subsection "section1.1", unit "Unit 1.1.1". Put some content in it

  5. create content group A

  6. create cohort A, don't put XX in it.

  7. make Unit 1.1.1 visible only to content group A.

  8. publish it.

  9. Sign out as edx,

  10. Sign in as XX

  11. go to the course outline in the new experience and the legacy experince

Expected Behavior: In both versions, XX cannot see "Unit 1.1.1" or any sections or subsections, as they are for cohort A, and XX is not in that cohort.
Actual Behavior: See on MFE that XX can see all the supposed to be hidden sections and units, but cannot access hidden content as expected. 

Kyle McCormick (Deactivated)
August 19, 2021

I tried this out, and this is what I found:

Given section1, with a lone subsection1.1, with a lone unit1.1.1, where unit1.1.1 is restricted to content group A (of which XX is not a member):

  • XX can see section1 and subsection1.1 on the outline.

  • If XX clicks on the link to subsection1.1, they are brought to unit1.1.1, which displays its title, but does not show the content.

  • If XX clicks “Previous” or “Next” (bringing them to the previous or next section), and then navigates in the opposite direction (bringing them back towards unit1.1.1), then they do still land on unit1.1.1. That is, the unit isn’t skipped in navigation.

I found this behavior was consistent between Legacy and the MFE.

Kyle McCormick (Deactivated)
August 19, 2021

So, I think I found the same thing as @Connor Haugh (Deactivated) – I think we were just hung up on terminology earlier.

(Connor, did you find the Legacy had the same behavior, like I did?)

Notably, though, this is different than what @Julia Eskew (Deactivated) described. My hypothesis is that what Julia is saying is true about the Learning Sequences Outlines API, but, we don’t use that API yet for navigation. Afaik, we’re still leaning on the Course Blocks API, which doesn’t have the “remove the subsection if its units content is restricted” behavior. If that is true, then I believe we can remove this note from the Maple notes.

If we wanted to be sure, we could leave this as-is for now (and close out the ticket), but leave a note for Dave O to fact-check the note and this comment thread when he’s back next week.

Connor Haugh (Deactivated)
August 23, 2021

Turns out the behavior we all expected to occur is controlled by the the waffle flag learning_sequences.use_for_outlines waffle flag. Thanks Dave. As this behavior is the same on both, I will edit this section to describe how the waffle flag can change behavior.

Kyle McCormick
November 29, 2021

@Connor Haugh (Deactivated) were you able to update the section with what we found in this thread?