Skip to content

feat: land ulmo.1 (Django 5.2) on release-ulmo, batch 1 [LP-1148] - #514

Draft
robrap wants to merge 27 commits into
release-ulmofrom
robrap/lp1148-ulmo1-batch1
Draft

robrap wants to merge 27 commits into
release-ulmofrom
robrap/lp1148-ulmo1-batch1

Conversation

@robrap

@robrap robrap commented Oct 8, 2026 •

Copy link
Copy Markdown

Summary

Batch 1 of the ulmo upgrade: ulmo.1 only, the only upstream point that has ever run in prod (#304, 2026-05-22 to 2026-05-27). Later batches (ulmo.2 through ulmo.4+) merge the upstream tags straight into release-ulmo once this has landed.

Status: code on the branch, CI pending. Revert of the revert 3a8fdad2fd, ports, Django 5.2.18 bump and audit are done; QA has not started. The plan is the source of truth, including the next step: docs/plans/LP-1148-ulmo-upgrade.md. Do not duplicate it here.

This supersedes #505 (ulmo.3 base plus ulmo.4+), which becomes a reference branch and will be closed once its docs have moved here.

Ticket: LP-1148 (epic LP-1309).

🤖 Generated with Claude Code

robrap and others added 2 commits October 8, 2026 16:57
Move the LP-1148 plan and merge audit here from the superseded reference
PR #505 and rewrite them for the batched approach: batch 1 is ulmo.1, the
only upstream point that has run in prod, built as a revert of the
revert (3a8fdad) on the release-ulmo tip; later batches merge the
upstream ulmo tags straight into release-ulmo.

The plan records the deploy/revert history, the decisions, how to
cross-check against edx/ulmo.1, edx/ulmo.3 and #505, the risk list for
the post-ulmo.1 upstream changes, and the next step (the merge work), so
a fresh session can continue from the docs alone.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
robrap added a commit that referenced this pull request Oct 8, 2026
The plan, merge audit and docs/plans README now live only in
#514 (branch
robrap/lp1148-ulmo1-batch1). This PR is superseded and kept as a
reference branch.

Co-Authored-By: Claude <noreply@anthropic.com>
robrap and others added 19 commits October 8, 2026 17:55
… soft freeze

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
… and next steps

Group review and testing notes into one QA section (LP-1351), add a Jira
tickets section, record that batch 2 scope is open, and drop the soft
freeze. Record what the edx-internal deploy history shows was in prod and
when, add a how-to for checking it, and note the unreconciled May 27
timeline. Next step is the migration review, before the branch work.

Co-Authored-By: Claude <noreply@anthropic.com>
Drop the open SELECT VERSION() check; the MariaDB UUID migrations are
no-ops.

Co-Authored-By: Claude <noreply@anthropic.com>
Add the openedx-authz/casbin and openedx-learning migrations that ulmo.1
brings through dependency upgrades, note that openedx_authz 0006 cannot be
reversed, extend the prod queries, and add a library-permissions test item.

Co-Authored-By: Claude <noreply@anthropic.com>
The authz data migration only copies content_libraries (v2) permission
rows; record the prod queries that decide whether it has any data.

Co-Authored-By: Claude <noreply@anthropic.com>
Prod kept the casbin/authz/submissions migrations from the May deploy and
lost the reversible ones; contentstore 0014 looks low-risk there. Note
that information_schema row estimates are unreliable.

Co-Authored-By: Claude <noreply@anthropic.com>
Prod, edge and stage migration state is known and needs no manual steps;
the normal deploy applies what is missing. Replace the interim results
with a per-environment state table, note how migrations and rollbacks run,
the stage schema-ahead-of-code mismatch, and the openedx-authz version
check for the batch-1 audit.

Co-Authored-By: Claude <noreply@anthropic.com>
Batch 1 of the ulmo upgrade [LP-1148]: bring back upstream release/ulmo.1
(Django 5.2) by reverting the May 27 revert, on the current release-ulmo.

Conflict resolutions (13 files):
- .github/workflows/check-for-tutorial-prs.yml: keep deleted (#507).
- create_user_gdpr_testing.py: keep deleted (fork removal, ENT-11576).
- xmodule/js/src/video/02_html5_hls_video.js: accept upstream's move to
  xmodule/assets/video/public/js/; the fork's HLS retry change is ported
  in a separate commit.
- contentstore/views/course.py: keep #509's LP-1102 staff branch and toggle
  import, then upstream's set-based org logic; drop the removed
  use_new_home_page / use_new_course_outline_page imports.
- modulestore_migrator/models.py: keep the fork's `.. no_pii:` annotations
  (#352).
- test_content_libraries.py: import both CourseKey (#509) and
  LibraryCollectionLocator (ulmo.1).
- user_api accounts test_api.py: keep #517's timezone/pytz imports and
  ulmo.1's ZoneInfo.
- course_duration_limits test_access.py: keep the fork's RequestCache
  clearing, with ulmo.1's ZoneInfo.
- requirements/common_constraints.txt: keep the fork's pip<26.2.1 and
  social-auth constraints (supersede ulmo.1's pip<25.3).
- requirements/edx/*.txt: lti-consumer-xblock 9.14.3 (ulmo.1), ora2 6.17.2
  (fork; it no longer needs loremipsum).

Co-Authored-By: Claude <noreply@anthropic.com>
#461 (353a5da) removed the enable_audio_description waffle flag and
the `audioDescriptionEnabled` player metadata, and dropped the matching
gating from xmodule/js/src/video/09_video_audio_description.js. Upstream
ulmo moved the video JS to xmodule/assets/video/public/js/, so on this
branch the JS change merged cleanly into the stale old-path copy while the
live copy kept gating on the now-missing `audioDescriptionEnabled`,
which would hide audio description entirely.

Apply the same change to the live file.

Co-Authored-By: Claude <noreply@anthropic.com>
(cherry picked from commit 6732d6f)
Upstream ulmo moved the video JS from xmodule/js/src/video/ to
xmodule/assets/video/public/js/. The fork's HLS fragment retry limit
(fb8bc85, 43300f9) was on the old path. The merge commit
fef5916 describes this port, but the change was left out of that
commit; this adds it.

Also fix the merged spec test, which referenced `Hls` while the migrated
spec imports `HLS`.

Co-Authored-By: Claude <noreply@anthropic.com>
(cherry picked from commit 687065c)
The fork's #215 (8fb361b) capped the video language selection menu
height. Its CSS part merged into VideoBlockDisplay.css, but its JS part
was on xmodule/js/src/video/09_video_caption.js, which upstream ulmo
moved to xmodule/assets/video/public/js/. Apply it to the live file.

Co-Authored-By: Claude <noreply@anthropic.com>
(cherry picked from commit c56841c)
Upstream removed studio-frontend (28ab2ce), and this branch no longer
depends on it, but the merge kept the studio-frontend source in
`pull_translations`. Remove it; `$(ATLAS_EXTRA_SOURCES)` stays as the
continuation line.

Co-Authored-By: Claude <noreply@anthropic.com>
(cherry picked from commit 91b8e72)
Security release. Same six pin lines that the upgrade-one-python-dependency
workflow changed for #505 (d408f09); patch releases change no
dependencies. Kept as its own commit so it is easy to drop.

Co-Authored-By: Claude <noreply@anthropic.com>
…elist

openedx-learning 0.30.2 (in ulmo.1) adds this model, whose docstring has
'.. no_pii' without the colon, so pii_check coverage falls below 100%.
release-ulmo lists it only under the old openedx_content label. Same fix as
feac70e on #505.

Co-Authored-By: Claude <noreply@anthropic.com>
The revert of the revert conflicted in 13 files, not many. The PII safelist
fix is needed in batch 1 because openedx-learning 0.30.2 is in ulmo.1.
Record the audit and cross-check results, the hand-edited Django bump,
and that #507 has landed.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
The revert-of-revert commit was reworded to a conventional-commit subject,
which changed it and the commits above it.

Co-Authored-By: Claude <noreply@anthropic.com>
@robrap
robrap force-pushed the robrap/lp1148-ulmo1-batch1 branch from 5670f1d to 403fa91 Compare October 9, 2026 22:43
farhan and others added 6 commits October 9, 2026 18:48
- Change the `i18n` service declaration from `wants` to `needs`, since the
  runtime must provide it for the block to function correctly.

- Update the `public_view` webpack JS reference from `VideoBlockMain` to
  `VideoBlockDisplay`, as all VideoBlock JS files are bundled into
  `VideoBlockDisplay` and `VideoBlockMain` is not referring to anything
   or no longer exists in the repository.

(cherry picked from commit 94963db)
…snapshot migration check

The edx/ulmo.3 cross-check found a ulmo.1 regression (video public_view
bundle) that upstream fixed only on master and verawood; batch 1 takes the
fix. The manual show_unapplied_migrations run against a stage snapshot is
redundant with the known code and database state; review the deploy's own
migration_plan.yml instead. Add a public-video QA item.

Co-Authored-By: Claude <noreply@anthropic.com>
…1148 plan

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
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.

2 participants