From 744ce52fd8f7a7220e3c1ab17785386251f3b23f Mon Sep 17 00:00:00 2001 From: Taimoor Ahmed Date: Thu, 4 Jun 2026 13:25:44 +0500 Subject: [PATCH 1/2] fix: backport openedx-forum 0.4.1 to teak for thread sort bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the `openedx-forum` pin from 0.4.0 to 0.4.1 on `release/teak` to pull in the fix for the "pinned"-NULL sort bug (openedx/forum#270, commit 78b36e4) where discussion threads were not ordering correctly when users selected "recent first" — old threads with NULL `pinned` values floated above newer threads. Reported in: https://discuss.openedx.org/t/discuss-forum-messages-order-not-organized-as-expected-in-teak/18665 Caps openedx-forum at <=0.4.1 in constraints.txt to avoid: * 0.4.2 — drops Python 3.11 support (Teak still supports 3.11) * 0.4.3 — removes the MongoDB backend (Teak deployments may rely on it) The 0.4.0 -> 0.4.1 delta also adds the optional Typesense search backend (additive, off by default), pulling in `typesense==2.0.0` as a new transitive dependency. That pin is added to the compiled requirements files. The constraint should be removed on master / post-Teak release lines. Co-Authored-By: Claude Opus 4.7 --- requirements/constraints.txt | 11 +++++++++++ requirements/edx/base.txt | 4 +++- requirements/edx/development.txt | 7 ++++++- requirements/edx/doc.txt | 6 +++++- requirements/edx/testing.txt | 6 +++++- 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/requirements/constraints.txt b/requirements/constraints.txt index ba888ac023ba..7788fb49ad30 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -119,6 +119,17 @@ openedx-learning==0.26.0 # Issue for unpinning: https://github.com/openedx/edx-platform/issues/35268 openai<=0.28.1 +# Date: 2026-06-04 +# Cap openedx-forum to 0.4.1 on the Teak release line: +# * 0.4.1 contains the fix for the "pinned" NULL sort bug +# (https://github.com/openedx/forum/pull/270 — discussion threads were not +# ordering correctly when sorted by "recent first"). See user report: +# https://discuss.openedx.org/t/discuss-forum-messages-order-not-organized-as-expected-in-teak/18665 +# * 0.4.2 drops Python 3.11 support, which Teak still supports. +# * 0.4.3 removes the MongoDB backend, which Teak deployments may still rely on. +# Remove this cap on master / post-Teak release lines. +openedx-forum<=0.4.1 + # Date: 2024-04-26 # path==16.12.0 breaks the unit test collections check # needs to be investigated and fixed separately diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index 5e7beb804df1..a977eaca2f85 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -815,7 +815,7 @@ openedx-filters==2.0.1 # -r requirements/edx/kernel.in # lti-consumer-xblock # ora2 -openedx-forum==0.4.0 +openedx-forum==0.4.1 # via -r requirements/edx/kernel.in openedx-learning==0.26.0 # via @@ -1155,6 +1155,8 @@ tqdm==4.67.1 # via # nltk # openai +typesense==2.0.0 + # via openedx-forum typing-extensions==4.13.2 # via # beautifulsoup4 diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 1eb8e59d1d60..9714c7bb7624 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -1374,7 +1374,7 @@ openedx-filters==2.0.1 # -r requirements/edx/testing.txt # lti-consumer-xblock # ora2 -openedx-forum==0.4.0 +openedx-forum==0.4.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt @@ -2093,6 +2093,11 @@ tqdm==4.67.1 # -r requirements/edx/testing.txt # nltk # openai +typesense==2.0.0 + # via + # -r requirements/edx/doc.txt + # -r requirements/edx/testing.txt + # openedx-forum types-pyyaml==6.0.12.20250402 # via # django-stubs diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index b8cbcd960681..84e782dfba26 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -986,7 +986,7 @@ openedx-filters==2.0.1 # -r requirements/edx/base.txt # lti-consumer-xblock # ora2 -openedx-forum==0.4.0 +openedx-forum==0.4.1 # via -r requirements/edx/base.txt openedx-learning==0.26.0 # via @@ -1462,6 +1462,10 @@ tqdm==4.67.1 # -r requirements/edx/base.txt # nltk # openai +typesense==2.0.0 + # via + # -r requirements/edx/base.txt + # openedx-forum typing-extensions==4.13.2 # via # -r requirements/edx/base.txt diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 7995a7122ada..bf1922f349ea 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -1044,7 +1044,7 @@ openedx-filters==2.0.1 # -r requirements/edx/base.txt # lti-consumer-xblock # ora2 -openedx-forum==0.4.0 +openedx-forum==0.4.1 # via -r requirements/edx/base.txt openedx-learning==0.26.0 # via @@ -1553,6 +1553,10 @@ tqdm==4.67.1 # -r requirements/edx/base.txt # nltk # openai +typesense==2.0.0 + # via + # -r requirements/edx/base.txt + # openedx-forum typing-extensions==4.13.2 # via # -r requirements/edx/base.txt From f8bbd1ce877d56b56b94a6551be6331f7dfcb31a Mon Sep 17 00:00:00 2001 From: Taimoor Ahmed Date: Thu, 4 Jun 2026 15:27:39 +0500 Subject: [PATCH 2/2] fix: cap typesense<2.0.0 to resolve pact-python httpx conflict on teak MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit openedx-forum 0.4.1 adds the (off-by-default) Typesense search backend, which transitively requires `typesense`. typesense>=2.0.0 requires httpx>=0.28.1, but pact-python==2.0.1 — a transitive test dependency already pinned on release/teak — requires httpx==0.23.3. That is an unresolvable pip conflict and causes CI's "Compile requirements" step to fail with ResolutionImpossible. typesense==1.3.0 only requires `requests`+`typing-extensions` (both already present on teak) and is sufficient since the Typesense backend is off by default on Teak; the active search backends are Meilisearch and Elasticsearch which do not depend on the typesense client. Adds `typesense<2.0.0` to requirements/constraints.txt with an explanatory comment and regenerates the compiled requirements files via `pip-compile --upgrade-package openedx-forum`. Co-Authored-By: Claude Opus 4.7 --- requirements/constraints.txt | 10 ++++++++++ requirements/edx/base.txt | 12 +++++++++--- requirements/edx/development.txt | 14 +++++++++----- requirements/edx/doc.txt | 9 +++++++-- requirements/edx/testing.txt | 9 +++++++-- 5 files changed, 42 insertions(+), 12 deletions(-) diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 7788fb49ad30..549fa458d597 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -130,6 +130,16 @@ openai<=0.28.1 # Remove this cap on master / post-Teak release lines. openedx-forum<=0.4.1 +# Date: 2026-06-04 +# openedx-forum>=0.4.1 introduces an (off-by-default) Typesense search backend +# that depends on the `typesense` Python client. typesense>=2.0.0 requires +# httpx>=0.28.1, which conflicts with pact-python==2.0.1 (a transitive test +# dependency on this release line) that pins httpx==0.23.3. typesense==1.3.0 +# only requires `requests`+`typing-extensions` and is sufficient for the +# Meilisearch/Elasticsearch backends that are actually used on Teak. Drop this +# cap when pact-python is upgraded past 2.0.x. +typesense<2.0.0 + # Date: 2024-04-26 # path==16.12.0 breaks the unit test collections check # needs to be investigated and fixed separately diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index a977eaca2f85..d700bc6f1779 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -816,7 +816,9 @@ openedx-filters==2.0.1 # lti-consumer-xblock # ora2 openedx-forum==0.4.1 - # via -r requirements/edx/kernel.in + # via + # -c requirements/edx/../constraints.txt + # -r requirements/edx/kernel.in openedx-learning==0.26.0 # via # -c requirements/edx/../constraints.txt @@ -1046,6 +1048,7 @@ requests==2.32.3 # slumber # snowflake-connector-python # social-auth-core + # typesense # xblock-google-drive requests-oauthlib==2.0.0 # via @@ -1155,8 +1158,10 @@ tqdm==4.67.1 # via # nltk # openai -typesense==2.0.0 - # via openedx-forum +typesense==1.3.0 + # via + # -c requirements/edx/../constraints.txt + # openedx-forum typing-extensions==4.13.2 # via # beautifulsoup4 @@ -1169,6 +1174,7 @@ typing-extensions==4.13.2 # pyopenssl # referencing # snowflake-connector-python + # typesense # typing-inspection typing-inspection==0.4.0 # via pydantic diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 9714c7bb7624..7974a84fe16a 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -1376,6 +1376,7 @@ openedx-filters==2.0.1 # ora2 openedx-forum==0.4.1 # via + # -c requirements/edx/../constraints.txt # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt openedx-learning==0.26.0 @@ -1831,6 +1832,7 @@ requests==2.32.3 # snowflake-connector-python # social-auth-core # sphinx + # typesense # xblock-google-drive requests-oauthlib==2.0.0 # via @@ -2093,17 +2095,18 @@ tqdm==4.67.1 # -r requirements/edx/testing.txt # nltk # openai -typesense==2.0.0 - # via - # -r requirements/edx/doc.txt - # -r requirements/edx/testing.txt - # openedx-forum types-pyyaml==6.0.12.20250402 # via # django-stubs # djangorestframework-stubs types-requests==2.32.0.20250328 # via djangorestframework-stubs +typesense==1.3.0 + # via + # -c requirements/edx/../constraints.txt + # -r requirements/edx/doc.txt + # -r requirements/edx/testing.txt + # openedx-forum typing-extensions==4.13.2 # via # -r requirements/edx/doc.txt @@ -2127,6 +2130,7 @@ typing-extensions==4.13.2 # pyopenssl # referencing # snowflake-connector-python + # typesense # typing-inspection typing-inspection==0.4.0 # via diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 84e782dfba26..d38baf49944c 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -987,7 +987,9 @@ openedx-filters==2.0.1 # lti-consumer-xblock # ora2 openedx-forum==0.4.1 - # via -r requirements/edx/base.txt + # via + # -c requirements/edx/../constraints.txt + # -r requirements/edx/base.txt openedx-learning==0.26.0 # via # -c requirements/edx/../constraints.txt @@ -1276,6 +1278,7 @@ requests==2.32.3 # snowflake-connector-python # social-auth-core # sphinx + # typesense # xblock-google-drive requests-oauthlib==2.0.0 # via @@ -1462,8 +1465,9 @@ tqdm==4.67.1 # -r requirements/edx/base.txt # nltk # openai -typesense==2.0.0 +typesense==1.3.0 # via + # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt # openedx-forum typing-extensions==4.13.2 @@ -1480,6 +1484,7 @@ typing-extensions==4.13.2 # pyopenssl # referencing # snowflake-connector-python + # typesense # typing-inspection typing-inspection==0.4.0 # via diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index bf1922f349ea..daa4635fe785 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -1045,7 +1045,9 @@ openedx-filters==2.0.1 # lti-consumer-xblock # ora2 openedx-forum==0.4.1 - # via -r requirements/edx/base.txt + # via + # -c requirements/edx/../constraints.txt + # -r requirements/edx/base.txt openedx-learning==0.26.0 # via # -c requirements/edx/../constraints.txt @@ -1397,6 +1399,7 @@ requests==2.32.3 # slumber # snowflake-connector-python # social-auth-core + # typesense # xblock-google-drive requests-oauthlib==2.0.0 # via @@ -1553,8 +1556,9 @@ tqdm==4.67.1 # -r requirements/edx/base.txt # nltk # openai -typesense==2.0.0 +typesense==1.3.0 # via + # -c requirements/edx/../constraints.txt # -r requirements/edx/base.txt # openedx-forum typing-extensions==4.13.2 @@ -1574,6 +1578,7 @@ typing-extensions==4.13.2 # pyopenssl # referencing # snowflake-connector-python + # typesense # typing-inspection typing-inspection==0.4.0 # via