Skip to content

feat!: remove studio.custom_relative_dates waffle flag - #39354

Draft
farhan wants to merge 3 commits into
masterfrom
farhan/remove-custom-relative-dates-flag
Draft

farhan wants to merge 3 commits into
masterfrom
farhan/remove-custom-relative-dates-flag

Conversation

@farhan

@farhan farhan commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Important

Merge order

  1. feat!: remove studio.custom_relative_dates waffle flag #39354 (openedx-platform) ← this PR
  2. feat: remove custom_relative_dates flag usage frontend-app-authoring#3349 (frontend)
  3. Follow-up openedx-platform PR: remove the is_custom_relative_dates_active API field

Merging the frontend first would make the outline show relative due weeks that the LMS doesn't apply yet.

Description

Removes the studio.custom_relative_dates CourseWaffleFlag, so custom relative due dates for self-paced courses are always on. Product agreed to keep this feature and drop its rollout flag (decision).

Area Change
LMS due dates
openedx/core/djangoapps/course_date_signals/handlers.py
A subsection's "relative weeks due" is always applied on publish (it was ignored while the flag was off)
Legacy Studio
course-outline.underscore, course_outline_modals.js, base.html, container_chromeless.html
Self-paced courses always show the relative-weeks field and the "Custom due date" line
Course index API
rest_api/v1/views/course_index.py
is_custom_relative_dates_active is kept but always true
Flag CUSTOM_RELATIVE_DATES deleted from contentstore/config/waffle.py

Caution

Breaking for operators (feat!): site operators who kept studio.custom_relative_dates off (the default) can no longer control this behavior. There is no flag to turn it back off.

On the next publish of a self-paced course, learner due dates can change without anyone editing the course:

  • Subsections with "relative weeks due" set use that value instead of the default schedule (handlers.py).
  • Ungraded sections with dated content get a section due date (handlers.py), even when no relative weeks were set.

SelfPacedRelativeDatesConfig still gates self-paced relative dates as a whole. Operators can delete the studio.custom_relative_dates flag records after deploying.

Why the API field stays: the authoring MFE on master treats a missing is_custom_relative_dates_active as false and would hide the relative weeks. It stays true until the companion MFE PR ships, then a small follow-up removes it.

Supporting information

Testing instructions

  1. Make sure studio.custom_relative_dates is off or doesn't exist in Django admin, and SelfPacedRelativeDatesConfig is enabled.
  2. In a self-paced course, open a graded subsection's settings. The Due in (weeks) field shows. Set it to 2 and publish.
  3. The outline shows "Custom due date: 2 weeks from enrollment" (legacy Studio and the authoring MFE).
  4. As an enrolled learner, the subsection's due date is 2 weeks after enrollment (Dates tab).

Deadline

None. Merge before the companion frontend PR.

🤖 Generated with Claude Code

Custom relative due dates for self-paced courses are now always on.
Product decided to keep the feature and drop its rollout flag:
openedx/frontend-app-authoring#3090 (comment)

BREAKING CHANGE: sites that had the flag off will now have the
subsection "relative weeks due" values applied to learner due dates,
and ungraded sections with dated content get a section due date.
SelfPacedRelativeDatesConfig still gates self-paced relative dates.

The course index API keeps is_custom_relative_dates_active (always
true) so authoring MFE versions that still read it keep showing the
weeks. It will be removed once the MFE stops reading it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
farhan and others added 2 commits November 6, 2026 16:48
course_date_signals.handlers no longer imports the contentstore waffle
module, so the ignored lms -> cms import no longer exists and
import-linter fails on the unmatched ignore.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deleting the flag left an extra newline at the end of the file, which
pylint reports as trailing-newlines (C0305).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant