QA release: backend 1.1.24, frontend 1.1.69 (frontend re-cut, 3rd)

BACKEND UNCHANGED. Only the frontend was rebuilt, so the 1.1.69 tag now
resolves to its third set of bits:

  frontend  r1  sha256:0663eb0d1fb8506b02842d08610bdcfa404756651260c20b03cf61c1534d26a3
            r2  sha256:db98bc5371faa77e28563a65741f958ee2e5a722a2d2b1e28ac73786dcdcf9e0
            r3  sha256:62fdd046bd7c2f140ad77b6343f97642ada70e478157ce6ae14bdf991e5c1184  <-- this one
  backend       sha256:548ef5e8d3c5a1bcc57a557b79fcde5ca8338868f0a89b44e2291938c17d624c

Built from 63402afa. Over r2 it adds:
  * /downloads redirected to /downloads/
  * the admin rail entry back, for SUPER_ADMIN only (r2 hid it from everyone)

Bundle hash v=0d21d5692e06, checked against r2's v=730b816a1164 before pushing
so a cache hit could not republish the old bundle under the same tag.

THE TAG WAS REUSED, so `docker compose up -d` will NOT pick this up on a host
already running an earlier 1.1.69 — the tag resolves locally and nothing is
fetched. Force the pull:

  cd /usr/local/conferencing
  sudo bash setup.sh --upgrade --backend-tag 1.1.24 --frontend-tag 1.1.69

Confirm afterwards:
  docker inspect --format '{{.Image}}' conferencing_frontend
  expect sha256:62fdd046bd7c...

Backend needs no action: V1.10.9 already ran on this host and is idempotent.
This tag has no release notes.