fix(deps): promote markdown to a core dependency so rich delivery works out of the box (#32486) (#38649)

`markdown` was declared only in the `matrix` optional extra, and the
official Docker image installs `--extra all --extra messaging --extra
anthropic --extra bedrock --extra azure-identity --extra hindsight` —
notably NOT `--extra matrix` (the matrix extra is deliberately routed to
lazy-install because `mautrix[encryption]`/`python-olm` can't build on
Windows/macOS — see the 2026-05-12 policy comment in `[all]`).

Result: `markdown` never lands in the image venv, so the Markdown->HTML
conversion on the DEFAULT delivery path silently falls back to plain
text. Cron/agent deliveries render raw `##`/`**`/tables in clients like
Element (no `formatted_body`). The conversion is now used by BOTH
`gateway/platforms/matrix.py` and `tools/send_message_tool.py`, so it is
no longer matrix-specific.

`markdown` is a pure-Python `py3-none-any` wheel (~108KB, no compiled
extensions, no platform constraints), so none of the reasons the matrix
extra was lazy-routed apply to it. Promote it to a core dependency so it
ships in the wheel, the Docker image, and every install; drop the now
redundant copies from the `matrix` extra and the `platform.matrix`
lazy-deps group; refresh the stale "installed with the matrix extra"
docstring.

Verified against a real build: ran the image's exact `uv sync` command
(same extras, no `--extra matrix`) in a clean container off the new
lockfile -> `import markdown` succeeds (3.10.2). On `origin/main` the
same command leaves markdown absent. 223 targeted tests pass
(test_matrix.py + test_lazy_deps.py).

Closes #32486.
This commit is contained in:
Ben Barclay
2026-06-05 09:46:36 +10:00
committed by GitHub
parent 495c3733d8
commit b434f8c3e0
4 changed files with 18 additions and 9 deletions

4
uv.lock generated
View File

@ -1398,6 +1398,7 @@ dependencies = [
{ name = "fire" },
{ name = "httpx", extra = ["socks"] },
{ name = "jinja2" },
{ name = "markdown" },
{ name = "openai" },
{ name = "pathspec" },
{ name = "prompt-toolkit" },
@ -1502,7 +1503,6 @@ matrix = [
{ name = "aiohttp-socks" },
{ name = "aiosqlite" },
{ name = "asyncpg" },
{ name = "markdown" },
{ name = "mautrix", extra = ["encryption"] },
]
mcp = [
@ -1642,7 +1642,7 @@ requires-dist = [
{ name = "httpx", extras = ["socks"], specifier = "==0.28.1" },
{ name = "jinja2", specifier = "==3.1.6" },
{ name = "lark-oapi", marker = "extra == 'feishu'", specifier = "==1.5.3" },
{ name = "markdown", marker = "extra == 'matrix'", specifier = "==3.10.2" },
{ name = "markdown", specifier = "==3.10.2" },
{ name = "mautrix", extras = ["encryption"], marker = "extra == 'matrix'", specifier = "==0.21.0" },
{ name = "mcp", marker = "extra == 'computer-use'", specifier = "==1.26.0" },
{ name = "mcp", marker = "extra == 'dev'", specifier = "==1.26.0" },