Course catalog is empty

@kmccormick
I think I might have some more info now. in short I was simply trying to test out the Catalog MFE so I’ve removed others like Discovery and that got the course listing to work again.
but now if I want to use catalog mfe I need to install edx-search 4.4.0 like:

from tutor import hooks

INSTALL_SEARCH_440 = r"""
RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
    pip install "edx-search==4.4.0"
"""

hooks.Filters.ENV_PATCHES.add_items([
    ("openedx-dockerfile-post-python-requirements", INSTALL_SEARCH_440),
    ("openedx-dev-dockerfile-post-python-requirements", INSTALL_SEARCH_440),
])

but this gives an error building the openedx image:

tutor images build openedx
Building image docker.io/overhangio/openedx:21.0.0-indigo
docker buildx build --tag=docker.io/overhangio/openedx:21.0.0-indigo --output=type=docker --cache-from=type=registry,ref=docker.io/overhangio/openedx:21.0.0-indigo-cache /home/tutor/.local/share/tutor/env/build/openedx
[+] Building 6.5s (27/66)                                                                                                                                                               docker-container:max3cpu
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.0s
 => => transferring dockerfile: 12.68kB                                                                                                                                                                     0.0s
 => resolve image config for docker-image://docker.io/docker/dockerfile:1                                                                                                                                   0.3s
 => CACHED docker-image://docker.io/docker/dockerfile:1@sha256:b6afd42430b15f2d2a4c5a02b919e98a525b785b1aaff16747d2f623364e39b6                                                                             0.0s
 => => resolve docker.io/docker/dockerfile:1@sha256:b6afd42430b15f2d2a4c5a02b919e98a525b785b1aaff16747d2f623364e39b6                                                                                        0.0s
 => [internal] load metadata for docker.io/library/ubuntu:22.04                                                                                                                                             1.2s
 => [internal] load metadata for ghcr.io/astral-sh/uv:0.9.18                                                                                                                                                2.1s
 => [internal] load metadata for docker.io/powerman/dockerize:0.19.0                                                                                                                                        2.4s
 => [internal] load .dockerignore                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                             0.0s
 => importing cache manifest from docker.io/overhangio/openedx:21.0.0-indigo-cache                                                                                                                          1.4s
 => => inferred cache manifest type: application/vnd.oci.image.manifest.v1+json                                                                                                                             0.0s
 => [internal] load build context                                                                                                                                                                           0.0s
 => => transferring context: 8.92kB                                                                                                                                                                         0.0s
 => FROM ghcr.io/astral-sh/uv:0.9.18@sha256:5713fa8217f92b80223bc83aac7db36ec80a84437dbc0d04bbc659cae030d8c9                                                                                                0.0s
 => => resolve ghcr.io/astral-sh/uv:0.9.18@sha256:5713fa8217f92b80223bc83aac7db36ec80a84437dbc0d04bbc659cae030d8c9                                                                                          0.0s
 => [minimal 1/3] FROM docker.io/library/ubuntu:22.04@sha256:c7eb020043d8fc2ae0793fb35a37bff1cf33f156d4d4b12ccc7f3ef8706c38b1                                                                               0.0s
 => => resolve docker.io/library/ubuntu:22.04@sha256:c7eb020043d8fc2ae0793fb35a37bff1cf33f156d4d4b12ccc7f3ef8706c38b1                                                                                       0.0s
 => [code 3/4] ADD --keep-git-dir=true https://github.com/openedx/edx-platform.git#release/ulmo.1 .                                                                                                         1.1s
 => FROM docker.io/powerman/dockerize:0.19.0@sha256:a34158d699e065609fc845e7cdc1e070f185afdbca317fe4931aaea04818f8bf                                                                                        0.0s
 => => resolve docker.io/powerman/dockerize:0.19.0@sha256:a34158d699e065609fc845e7cdc1e070f185afdbca317fe4931aaea04818f8bf                                                                                  0.0s
 => CACHED [minimal 2/3] RUN --mount=type=cache,target=/var/cache/apt,sharing=locked     --mount=type=cache,target=/var/lib/apt,sharing=locked     apt update &&     apt install -y build-essential curl g  0.0s
 => CACHED [minimal 3/3] COPY --from=ghcr.io/astral-sh/uv:0.9.18 /uv /usr/local/bin/uv                                                                                                                      0.0s
 => CACHED [code 1/4] RUN mkdir -p /openedx/edx-platform                                                                                                                                                    0.0s
 => CACHED [code 2/4] WORKDIR /openedx/edx-platform                                                                                                                                                         0.0s
 => CACHED [code 3/4] ADD --keep-git-dir=true https://github.com/openedx/edx-platform.git#release/ulmo.1 .                                                                                                  0.0s
 => CACHED [code 4/4] RUN git config --global user.email "tutor@overhang.io"   && git config --global user.name "Tutor"                                                                                     0.0s
 => CACHED [edx-platform 1/1] COPY --from=code /openedx/edx-platform /                                                                                                                                      0.0s
 => CACHED [python 1/4] RUN --mount=type=cache,target=/var/cache/apt,sharing=locked     --mount=type=cache,target=/var/lib/apt,sharing=locked     apt update &&     apt install -y libssl-dev zlib1g-dev l  0.0s
 => CACHED [python 2/4] RUN git clone https://github.com/pyenv/pyenv /opt/pyenv --branch v2.3.36 --depth 1                                                                                                  0.0s
 => CACHED [python 3/4] RUN /opt/pyenv/bin/pyenv install 3.11.8                                                                                                                                             0.0s
 => CACHED [python 4/4] RUN /opt/pyenv/versions/3.11.8/bin/python -m venv /openedx/venv                                                                                                                     0.0s
 => CACHED [python-requirements 1/7] RUN --mount=type=cache,target=/var/cache/apt,sharing=locked     --mount=type=cache,target=/var/lib/apt,sharing=locked     apt update     && apt install -y software-p  0.0s
 => CACHED [python-requirements 2/7] RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared     uv pip install     setuptools==69.1.1 pip==24.0 wheel==0.43.0                                     0.0s
 => ERROR [python-requirements 3/7] RUN --mount=type=bind,from=edx-platform,source=/requirements/edx/base.txt,target=/openedx/edx-platform/requirements/edx/base.txt     --mount=type=bind,from=edx-platfo  1.3s
------
 > [python-requirements 3/7] RUN --mount=type=bind,from=edx-platform,source=/requirements/edx/base.txt,target=/openedx/edx-platform/requirements/edx/base.txt     --mount=type=bind,from=edx-platform,source=/requirements/edx/assets.txt,target=/openedx/edx-platform/requirements/edx/assets.txt     --mount=type=cache,target=/openedx/.cache/pip,sharing=shared     uv pip install -r /openedx/edx-platform/requirements/edx/base.txt -r /openedx/edx-platform/requirements/edx/assets.txt:
0.140 Using Python 3.11.8 environment at: /openedx/venv
1.257   × Failed to build `loremipsum==1.0.5`
1.257   ├─▶ The build backend returned an error
1.257   ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit
1.257       status: 1)
1.257
1.257       [stderr]
1.257       Traceback (most recent call last):
1.257         File "<string>", line 14, in <module>
1.257         File
1.257       "/openedx/.cache/pip/builds-v0/.tmpgTeYXs/lib/python3.11/site-packages/setuptools/build_meta.py",
1.257       line 333, in get_requires_for_build_wheel
1.257           return self._get_build_requires(config_settings, requirements=[])
1.257                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1.257         File
1.257       "/openedx/.cache/pip/builds-v0/.tmpgTeYXs/lib/python3.11/site-packages/setuptools/build_meta.py",
1.257       line 301, in _get_build_requires
1.257           self.run_setup()
1.257         File
1.257       "/openedx/.cache/pip/builds-v0/.tmpgTeYXs/lib/python3.11/site-packages/setuptools/build_meta.py",
1.257       line 520, in run_setup
1.257           super().run_setup(setup_script=setup_script)
1.257         File
1.257       "/openedx/.cache/pip/builds-v0/.tmpgTeYXs/lib/python3.11/site-packages/setuptools/build_meta.py",
1.257       line 317, in run_setup
1.257           exec(code, locals())
1.257         File "<string>", line 13, in <module>
1.257         File
1.257       "/openedx/.cache/pip/sdists-v9/pypi/loremipsum/1.0.5/LKbpG553hq161wdZGTyob/src/loremipsum/__init__.py",
1.257       line 61, in <module>
1.257           from .generator import Generator, DictionaryError, SampleError
1.257         File
1.257       "/openedx/.cache/pip/sdists-v9/pypi/loremipsum/1.0.5/LKbpG553hq161wdZGTyob/src/loremipsum/generator.py",
1.257       line 8, in <module>
1.257           from pkg_resources import resource_string
1.257       ModuleNotFoundError: No module named 'pkg_resources'
1.257
1.257       hint: This error likely indicates that `loremipsum@1.0.5` depends
1.257       on `pkg_resources`, but doesn't declare it as a build dependency. If
1.257       `loremipsum` is a first-party package, consider adding `pkg_resources`
1.257       to its `build-system.requires`. Otherwise, either add it to your
1.257       `pyproject.toml` under:
1.257
1.257       [tool.uv.extra-build-dependencies]
1.257       loremipsum = ["pkg_resources"]
1.257
1.257       or `uv pip install pkg_resources` into the environment and re-run with
1.257       `--no-build-isolation`.
------
Dockerfile:91
--------------------
  90 |     # Install base requirements and asset-building requirements
  91 | >>> RUN --mount=type=bind,from=edx-platform,source=/requirements/edx/base.txt,target=/openedx/edx-platform/requirements/edx/base.txt \
  92 | >>>     --mount=type=bind,from=edx-platform,source=/requirements/edx/assets.txt,target=/openedx/edx-platform/requirements/edx/assets.txt \
  93 | >>>     --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
  94 | >>>     $PIP_COMMAND install -r /openedx/edx-platform/requirements/edx/base.txt -r /openedx/edx-platform/requirements/edx/assets.txt
  95 |
--------------------
ERROR: failed to build: failed to solve: process "/bin/sh -c $PIP_COMMAND install -r /openedx/edx-platform/requirements/edx/base.txt -r /openedx/edx-platform/requirements/edx/assets.txt" did not complete successfully: exit code: 1
Error: Command failed with status 1: docker buildx build --tag=docker.io/overhangio/openedx:21.0.0-indigo --output=type=docker --cache-from=type=registry,ref=docker.io/overhangio/openedx:21.0.0-indigo-cache /home/tutor/.local/share/tutor/env/build/openedx

But without edx-search==4.4.0 then I’m missing the endpoint unstable/v0/course_list_search thus I’m getting a 404 when listing courses, that’s why everything is empty:

lms-1 | [pid: 14|app: 0|req: 23/46] 172.18.0.2 () {68 vars in 4107 bytes} [Mon Feb 9 09:15:38 2026] POST /search/unstable/v0/course_list_search/ => generated 9770 bytes in 69 msecs (HTTP/1.1 404) 10 headers in 597 bytes (1 switches on core 0)
caddy-1 | {"level":"error","ts":1770628538.3851182,"logger":"http.log.access.log0","msg":"handled request","request":{"remote_ip":"x.x.x.x","remote_port":"53475","client_ip":"x.x.x.x","proto":"HTTP/3.0","method":"POST","host":"lms.domain.tld","uri":"/search/unstable/v0/course_list_search/","tls":{"resumed":true,"version":772,"cipher_suite":4865,"proto":"h3","server_name":"lms.domain.tld"}},"bytes_read":367,"user_id":"","duration":0.069913141,"size":3356,"status":404}